我目前正在努力找到正确的查询以实现我想要实现的目标,并且想知道是否有人有一些好主意。 已经在这里丢了很多天了,只是找不到正确的查询来得到我需要的东西。
期望的结果:
我目前拥有完全有效的论坛,有多个类别,因为有多个类别我想制作概述页面,基本上说明最后一个帖子,最后一个帖子,由谁以及每个类别的时间。
以下是我的表格结构
名称:论坛 字段: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
任何人都有任何想法?
答案 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与