Mysql 限制联接获取的行数
如何将获取的子行限制为仅5行 这是小提琴。现在它获取所有带有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
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中没有全局或非全局,它只是内存中的一个变量