0

我正在整理一个带有主题/帖子的简单论坛脚本。我正在尝试通过最新帖子对主题进行排序,并且在以下问题中得到了一些答案: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 中没有匹配项,我想告诉 ORDER BY 按 forum.time_created 进行排序。


附带说明一下,我还想知道如何将 WHERE 子句放入此查询中。我只想从论坛表“WHERE access <= ?”中获取行,但无法确定片段的放置位置。

非常感谢任何帮助!


编辑:

目标是返回主题(来自论坛表)根据以下详细信息:

  1. 在哪里 forum.access <= ?
  2. 限制 ?,?
  3. ORDER BY 来自 forum_posts 表的最新帖子,其中 forum_posts.parent_id 与 forum.id 或 forum.time_created 匹配

编辑2:

带有相关数据的示例 SQLfiddle。这是行不通的,因为订单应该是 11,10,9,1,2 http://sqlfiddle.com/#!2/83535/2

4

1 回答 1

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

parent_id本质上,子查询(LEFT JOIN 之后括号中的位)从forum_posts表中为每个选择最近的帖子。

然后左加入(因为我们想列出所有论坛的,即使还没有帖子)。

于 2013-11-14T11:28:04.270 回答