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