【发布时间】:2012-08-10 11:16:34
【问题描述】:
我正在努力解决这个问题,即使 Stack Overflow 上有一些类似的问题,我也找不到正确的解决方案。我有三个表:categories, topics 和 posts 我想加入它们并在categories 中显示每个类别以及来自topics 的最新主题的主题,其中发布了一些内容,最后是最新日期帖子是从posts 表中发布的。
我成功地让所有内容都按我想要的方式显示,只是我无法从每个类别中获取最新的帖子记录。
这是查询:
SELECT c.cat_id, c.cat_name, c.cat_description, t.topic_subject, t.topic_id, p.post_date FROM categories c
LEFT JOIN topics t ON c.cat_id = t.topic_cat
LEFT JOIN posts p ON p.post_topic = t.topic_id AND p.post_date = ( SELECT MAX(post_date) as post_date FROM posts WHERE post_topic = t.topic_id )
GROUP BY c.cat_id ORDER BY UNIX_TIMESTAMP(post_date) DESC
我意识到这应该与 WHERE 子句中的 topic_id 不是我正在寻找的那个有关。另一个这样的:
SELECT c.cat_id, c.cat_name, c.cat_description, t.topic_subject, t.topic_id, p.post_date FROM categories c
LEFT JOIN topics t ON c.cat_id = t.topic_cat AND t.topic_id = ( SELECT post_topic FROM posts ORDER BY UNIX_TIMESTAMP(post_date) DESC LIMIT 1 )
LEFT JOIN posts p ON p.post_topic = t.topic_id AND p.post_date = ( SELECT MAX(post_date) as post_date FROM posts WHERE post_topic = t.topic_id )
GROUP BY c.cat_id ORDER BY UNIX_TIMESTAMP(post_date) DESC
显然只会显示包含最新帖子的类别的正确帖子。如何获取所有类别的最新帖子?
【问题讨论】:
-
主题表是否有字段 post_date?
-
不,只有帖子表。它们都通过它们的 ID 连接,例如 cat_id = topic_cat 和 topic_id = post_topic
标签: sql join group-by sql-order-by