MySQL查询排序正确的信息

时间:2013-11-03 04:03:25

标签: php mysql sql forum

我目前正在努力找到正确的查询以实现我想要实现的目标,并且想知道是否有人有一些好主意。 已经在这里丢了很多天了,只是找不到正确的查询来得到我需要的东西。

期望的结果:

我目前拥有完全有效的论坛,有多个类别,因为有多个类别我想制作概述页面,基本上说明最后一个帖子,最后一个帖子,由谁以及每个类别的时间。

以下是我的表格结构

名称:论坛 字段:id,name

名称:forum_threads 字段:id,f_id,subject,author,lastpost

命名: forum_posts 字段:id,t_id,帖子,作者,时间

实际问题

到目前为止,我已经得到了查询,它显示了我想要的所有内容,除了一件事,它没有得到最新的主题主题,其他一切似乎都正确显示(注意我已禁用forums.id 9和12以上的所有内容,我都不想显示这些结果。

SELECT forums.id, t.id AS thread_id,
   t.subject,
   t.forum_id,
   t.author, t.lastpost,
   u1.name AS author_name, u1.avatar AS author_avatar,
   u2.name AS lastpost_name, u.avatar AS lastpost_avatar
    COUNT(p.id) AS postscount,  COUNT(DISTINCT (t.id)) AS threadscount,
   forums.name,
   max(p.time) last_post_date
FROM forum_threads t
INNER JOIN users u1 ON u1.id = t.author
INNER JOIN users u2 ON u2.id = t.lastpost
INNER JOIN forum_posts p ON p.t_id = t.id
INNER JOIN forums ON forums.id = t.forum_id
WHERE forums.id != 9 AND forums.id > 12
GROUP BY  forums.id
ORDER BY forums.id ASC, p.id DESC, last_post_date DESC

任何人都有任何想法?

1 个答案:

答案 0 :(得分:1)

好吧,如果你检索的thread_id是正确的,并且subject表上的forum_threads列包含了你期望的主题,那么你的问题就出现了问题显示级别代码而不是您的查询。 (因为你从thread_id的同一行中提取t.subject,如果一个是正确的,那么另一个也应该是正确的。)

除此之外,这有点偏离主题,我提醒您不要使用WHERE forums.id != 9 AND forums.id > 12等构造。相反,您应该在disabled的数据库中有一个列,并对其进行查询。否则你会有一个难以维护的混乱。


在回复评论时,请尝试将此SQL块添加到JOIN子句中:

INNER JOIN (SELECT t2.forum_id as forum_id, MAX(lastpost) as lastpost
    FROM forum_threads t2
    GROUP BY t2.forum_id) as latest_post_per_forum
  ON latest_post_per_forum.forum_id = t.forum_id

这是你的WHERE条款:

  AND t.lastpost = latest_post_per_forum.lastpost

不幸的是我目前没有方便的MySQL实例来测试我的语法,但要点应该是明显的:在每个论坛的基础上提取最后一个帖子ID,然后将每个帖子的最后一个帖子ID与