在我的forum_threads
表中获得3行后,这不再是它的工作。这是组织活动论坛帖子的列表,并将最近响应的线程放在列表的顶部,然后是第二个最近发布的帖子,接着是第三个,第四个等等。
就像我说的那样,在forum_threads
添加第四行之前,查询会有效。
SELECT
forum_threads.*,
forum_posts.thread_id
FROM
forum_threads
INNER JOIN (
SELECT MAX(id) AS id, thread_id as thread_id
FROM forum_posts
GROUP BY thread_id
ORDER BY id DESC
) forum_posts ON forum_threads.id = forum_posts.thread_id
答案 0 :(得分:1)
乍一看,您的查询看起来没问题。有时以不同的方式尝试相同的事情以发现错误,因此请检查以下内容为您提供的内容:
SELECT
(SELECT MAX(id) FROM forum_posts WHERE thread_id = t.id) max_post_id,
t.id
FROM
forum_threads t
ORDER BY
max_post_id DESC
将综合索引添加到forum_posts
上的(thread_id, id)
。
答案 1 :(得分:1)
您似乎依赖MySQL以与内部查询相同的顺序对外部查询进行排序,而不实际指定您想要的内容。尝试将ORDER BY子句移动到外部查询:
SELECT
forum_threads.*,
forum_posts.thread_id
FROM
forum_threads
INNER JOIN (
SELECT MAX(id) AS id, thread_id as thread_id
FROM forum_posts
GROUP BY thread_id
) forum_posts ON forum_threads.id = forum_posts.thread_id
ORDER BY forum_posts.id DESC