2011-06-15 68 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