Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 限制联接获取的行数_Mysql_Greatest N Per Group - Fatal编程技术网

Mysql 限制联接获取的行数

Mysql 限制联接获取的行数,mysql,greatest-n-per-group,Mysql,Greatest N Per Group,如何将获取的子行限制为仅5行 这是小提琴。现在它获取所有带有parentid='4'和parentid='14'的行。它应该只获取每个parentid中的5个。假设我有数百行,那么每个parentid最多只能获取5行 "SELECT child.* FROM mytable as parent LEFT JOIN mytable as child on child.parentid=parent.id WHERE parent.pageid IN ( 1, 2) AND p

如何将获取的子行限制为仅5行

这是小提琴。现在它获取所有带有
parentid='4'
parentid='14'
的行。它应该只获取每个parentid中的5个。假设我有数百行,那么每个
parentid
最多只能获取5行

 "SELECT child.* FROM mytable as parent
     LEFT JOIN mytable as child on child.parentid=parent.id
     WHERE parent.pageid IN ( 1, 2) AND parent.submittype='1'
     ORDER BY child.id ASC";

我如何解决这个问题?

您希望每组的n最大。。这会满足你的要求。对不起,我正在打电话,所以无法格式化。。如果有人能为我编辑,那就太好了

SELECT 
    child.*, 
    if(@a = child.parentid, @b :=@b+1, @b := 1) as counting_col, 
    @a := child.parentid
FROM mytable as parent
LEFT JOIN mytable as child on child.parentid=parent.id
CROSS JOIN(select @a :=0, @b:=1) t
WHERE parent.pageid IN ( 1, 2) 
  AND parent.submittype='1'
HAVING counting_col <=5
ORDER BY child.id ASC
选择
儿童。*,
如果(@a=child.parentid,@b:=@b+1,@b:=1)作为计数列,
@a:=child.parentid
从mytable作为父级
在child.parentid=parent.id上作为子对象左键联接mytable
交叉连接(选择@a:=0、@b:=1)t
其中parent.pageid位于(1,2)
和父级。submittype='1'

谢谢,你介意解释一下变量的作用吗?我以前没有在mysql中使用过变量,所以当你有重复的parentid时,变量会检查值和增量,然后你添加having子句,表示每个parentis的限制为5。用我的手机很难解释和写问题。。我本来会添加一个SQLFIDLE,但是如果运行查询,我无法复制链接,您将看到计数列对变量的作用:)它很漂亮cool@user892134另一个注意事项是,如果不想从select中取出变量,可以将其放入子查询中。。让我知道,我可以补充一点,如果你愿意的话,把它放在那里。。如果您不这样做,那么多次运行查询将把它搞砸。因为变量没有重置,所以选择是如何重置的。。SQL中没有全局或非全局,它只是内存中的一个变量