2009-08-20 49 views
3

我有形式如何從mysql查詢中的每個組中選擇多個項目?

後(筆者的thread_id,文本)

每個作者的一些論壇的數據,我想選擇與該作者相關的10個不同的thread_ids(可能有超過10個,並且編號會因作者而異)。

我正在考慮使用GROUP BY來組合'作者',但我無法理解如何在每個組上表達LIMIT以及如何將每個組擴展回10行。

回答

6

下面是「每組最多N個」類型查詢的解決方案。

請注意,您必須選擇其中需要10個線程。對於這個例子,我假設你想要最近的線程(並且thread_id是一個自動增量值),對於關係的情況,你有一個主鍵posts.post_id

SELECT p1.* 
FROM post p1 LEFT OUTER JOIN post p2 
ON (p1.author = p2.author AND (p1.thread_id < p2.thread_id 
    OR p1.thread_id = p2.thread_id AND p1.post_id < p2.post_id)) 
GROUP BY p1.author 
HAVING COUNT(*) < 10; 

再在評論你的後續問題,這裏的解釋:

在每個作者的最高10個線程,我們可以說,對於這些,有9個或更少該作者的其他線程屬於結果集。因此,對於每個作者的帖子(p1),我們計算同一作者有多少帖子(p2)具有更大的帖子。如果該數小於10,則該作者的帖子(p1)屬於該結果。

我添加了一個術語來解決與post_id的關係。

+0

謝謝,這很有用。儘管我沒有完全理解思維過程,但是你會如此善意地闡述它的工作原理嗎? – saffsd 2009-08-26 10:50:04

相關問題