我正在整理一个包含主题/帖子的简单论坛脚本。我正在尝试通过最新帖子订购主题,我在以下问题中得到了一些运气:MYSQL Order from another Table,但我遇到的问题是某些主题还没有任何帖子,所以查询根本不会选择这些主题。
目前的编码是:
SELECT DISTINCT forum.*
FROM forum
INNER JOIN forum_posts
ON forum.id = forum_posts.parent_id
GROUP BY forum.id
ORDER BY forum_posts.parent_id DESC,
forum_posts.time_created DESC
LIMIT ?,?
如果某个主题的forum_posts.parent_id中没有匹配项,我想通过forum.time_created告诉ORDER BY订购。
另外,我还想知道如何将WHERE子句放入此查询中。我想只从论坛表“WHERE access< =?”获取行,但无法解决 where 将该片段放入。
非常感谢任何帮助!
修改
目标是返回主题(来自论坛表) 根据以下细节:
编辑2:
带有相关数据的示例SQLfiddle。这不起作用,因为订单真的应该是11,10,9,1,2 http://sqlfiddle.com/#!2/83535/2
答案 0 :(得分:1)
看看这个:http://sqlfiddle.com/#!2/be909/1
这是我的最终查询:
SELECT forum.*, recent_forum_posts.time_created as latest_post
FROM forum
LEFT JOIN (SELECT MAX(forum_posts.time_created) as time_created, forum_posts.parent_id
FROM forum_posts
GROUP BY forum_posts.parent_id) AS recent_forum_posts
ON forum.id = recent_forum_posts.parent_id
WHERE forum.access > 2
ORDER BY recent_forum_posts.time_created IS NULL DESC,
recent_forum_posts.time_created DESC,
forum.time_created DESC
LIMIT 5
基本上,子查询(LEFT JOIN之后括号中的位)从parent_id
表中选择每个forum_posts
的最新帖子。
那就是LEFT JOINed(因为我们想要列出所有论坛的内容,即使还没有帖子)。