2015-01-07 109 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以上的那些行被刪除 –

相關問題