2011-06-15 108 views
0

這是針對我正在處理的自定義論壇。我需要選擇所有線程,獲取每個線程中的帖子數以及每個線程中的最後一個帖子。我可以獲取帖子的數量,但是我的查詢返回的是第一篇文章,而不是最後一篇。MySQL無法正確排序查詢

SELECT thread_id, thread_title, p.*, COUNT(p.post_id) AS Posts 
    FROM forums_threads 
    JOIN forums_posts AS p ON post_thread_id=thread_id 
    WHERE thread_forum_id=84 
    GROUP BY thread_id 
    ORDER BY thread_date DESC, post_date DESC 

回答

1

正如@mixman所示,您需要鏈接到forum_posts兩次:一次獲取總金額(發佈日期和最大發布日期),一次獲取最後一篇文章的實際內容(我假設你的意思是「最近的」):

SELECT ft.thread_id, ft.thread_title, fp.*, pmin.postcount 
FROM forums_threads AS ft 
JOIN (
     SELECT post_thread_id, MAX(post_date), COUNT(post_id) AS postcount 
     FROM forums_posts 
     GROUP BY post_thread_id 
    ) AS pmin ON ft.thread_id=pmin.post_thread_id 
JOIN forums_posts AS fp ON fp.post_thread_id=pmin.post_thread_id AND fp.post_date = pmin.post_date 
WHERE ft.thread_forum_id=84 
ORDER BY ft.thread_date DESC 
+0

這給了我這個錯誤:#1054 - 'on子句'中的未知列'pmin.thread_id' – CrazeD 2011-06-15 21:40:10

+0

修復:pmin是forums_posts的別名,它的thread-id列是我誤稱。 (我希望這對你很明顯,以及...... :)) – 2011-06-15 21:43:26

+0

好吧,我讓你的SQL工作。然而,它會返回儘可能多的線程,因爲有帖子...所以我有30個線程與ID 1等,我只想要每行1組1行。 – CrazeD 2011-06-15 21:48:36

1

分組發生在按照SQL建議排序之前。然後對整個結果進行排序,併爲分組的thread_id返回第一個thread_date。使用子查詢/自連接來重構SQL應該可以完成任務。

+0

你能舉個例子嗎? – CrazeD 2011-06-15 21:28:31