我为正在创建的论坛应用程序创建了三个表:
boards
- 表示帖子的集合,is_deleted
布尔值posts
- 代表一些文本以及评论的集合comments
- 代表一些文字
我的目标是显示一定数量的未标记为已删除的板上的所有帖子,按对帖子的最后评论排序(然后是创建帖子时)。我必须这样做的当前查询是:
SELECT
posts.*,
(SELECT created_date
FROM comments
WHERE comments.post_id = posts.id
ORDER BY comments.created_date DESC
LIMIT 1) as last_comment
FROM posts
JOIN boards ON boards.id = posts.board_id
WHERE boards.is_deleted = 0
ORDER BY
last_comment DESC,
posts.created_date DESC
LIMIT 4
OFFSET 0
效果很好,但除了使用它来订购结果时,我实际上不需要last_comment
,所以感觉就像我正在运行一个额外的 SELECT 。有一个更好的方法吗?
编辑 2013-05-18:
再玩一玩,我相信我有一个不依赖嵌套 SELECT 语句的查询:
SELECT
posts.*
FROM posts
JOIN boards
ON boards.id = posts.board_id
LEFT OUTER JOIN comments
ON posts.id = comments.post_id
WHERE
boards.is_deleted = 0
GROUP BY
posts.id
ORDER BY
comments.created_date DESC,
posts.created_date DESC
LIMIT 4
OFFSET 0