MySQL无法正确排序查询

时间:2011-06-15 21:07:49

标签: mysql sql

这适用于我正在处理的自定义论坛。我需要选择所有线程,获取每个线程中的帖子数量以及每个线程中的最后一个帖子。我可以获得帖子数量,但我的查询是返回第一个帖子而不是最后一个帖子。

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

2 个答案:

答案 0 :(得分:1)

按照SQL建议,在排序之前进行分组。然后对整个结果进行排序,为分组的thread_id返回第一个thread_date。使用子查询/自连接重构SQL应该可以完成工作。

答案 1 :(得分: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