我目前正在努力寻找我想要实现的正确查询,并想知道是否有人有一些明智的想法。 已经在这里失去了很长一段时间,只是无法找到正确的查询来得到我所需要的。MySQL查询排序正确的信息
期望的结果:
我现在已经完全工作座谈会,与多个类别,因为这样的事实,有多个类别,我想作一个概述页面基本上说明最后一个线程,最后发表的帖子,由每个类别的人数和时间。
这里是我的表是如何构成的
名称:论坛 领域:ID,名称
名称:forum_threads 领域:ID,F_ID,主题作者,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
任何人有任何想法?
那么thread_id链接到主题相同的线程,只是它不是最新的线程被张贴在 欣赏关于题外情况的输入,我会尽快解决这个问题,一切准备就绪,这是为了防止某些论坛显示给未登录的用户。 – user2949138
您有几个选择:您可以在应用程序端进行过滤,以便从整个结果集中选择最大last_post_date的线程(随着您的网站变得更加繁忙,这可能会变得昂贵)。你也可以添加一个子查询,这在mysql中对于性能来说会很糟糕。您还可以在应用层执行第二次查询,并传入应用层中的ID列表。我将为答案添加一个子查询的例子。 – syrion
非常感谢!在玩过你发布的内容之后,我已经设法解决了我想要的确切结果,我也必须为我的计数做一个单独的内连接,但现在一切正常。 会给你kuddo的,但需要更多的声誉才能这样做,所以如果任何人都可以代表我做这件事,请为此传奇=) – user2949138