2015-01-07 74 views
0

我有一个表comments选择3条评论每篇文章

id | comment | post_id | 
1  Hey  1 
2  Hey  2 
3  Hey  2 
4  Hey  3 
5  Hey  1 

我想每个职位3个评论。

我做了下面这样的事情。

"select * from comments WHERE post_id IN(1,2,3) LIMIT 3"

但是,这产生了我的只有3 rows

但我想每post_id最大3 rows不是总计3 rows

任何帮助我哪里错了?

+0

尝试使用JOIN – violator667

+0

实现这个u能解释一下@ violator667 –

+2

这被称为“每组最大N”。这是经常被问到,并不是特别直接,我正在寻找一个良好的现有答案,指向你... –

回答

1

它像基于POST_ID做分区,然后在该分区做3种元素的选择 你可以使用MySQL的变量

select id, comment, post_id 
from 
(
SELECT id, comment, post_id, @row_number:=CASE WHEN @post_id=post_id THEN @row_number+1 ELSE 1 END AS row_number, 
     @post_id:=post_id AS varval 
FROM comments 
join (select @row_number := 0, @post_id := NULL) as var 
order by post_id, id 
) t 
where t.row_number <=3 
+0

#1054 - '字段列表'中的未知列'id' –

+0

发布在顶部的表有一个'comments.id'列。这应该是正确的。 –

+0

http://sqlfiddle.com/#!2/d7de45/2它应该按原样工作 - 我在'post_id = 1'上添加了更多示例行,以显示3以上的那些行被删除 –

相关问题