MySQL子查询..在表中输入3个条目后没有提供正确的信息

时间:2010-04-23 19:30:30

标签: sql mysql

在我的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

2 个答案:

答案 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