【发布时间】:2014-02-10 02:59:28
【问题描述】:
我正在尝试为一个学校项目编写一个论坛,但我仍在为一些疑问而苦苦挣扎。 所以,基本上我有以下表格:
- 论坛(forum_id、forum_title、forum_description)
- topics (topic_id,forum_id(所属论坛), topic_content...等)
- posts (post_id, topic_id(所属主题)...等)
我需要的是一个查询,它将在主页中显示所有论坛 + 计算所有主题并将其添加到相关论坛旁边,并计算属于相关论坛的所有主题的所有帖子。
这是我目前想出的:
SELECT
`forums`.*,
COUNT(`topics`.`topic_id`) AS `num_of_topics`,
COUNT(`posts`.`post_id`) AS `num_of_posts`
FROM `forums`
LEFT JOIN `topics` ON `topics`.`forum_id` = `forums`.`forum_id`
LEFT JOIN `posts` ON `posts`.`topic_id` = `topics`.`topic_id`
GROUP BY `forums`.`forum_id`
由于某种原因,此查询返回相当特殊的值。当有一个主题且没有属于该主题的帖子时,它会正确返回主题 1 和帖子 0。但是,当我添加更多相关帖子时,它也会增加主题数量。基本上,它将主题的数量等同于帖子的数量,所以如果帖子大于 0,我总是得到 x 个主题和 x 个帖子。
有什么想法吗?
【问题讨论】:
-
您能否为您的示例数据集问题添加一个 sql fiddle
-
提示:典型的论坛软件不计算在内。他们只是将其与论坛信息一起存储。不是直接回答您的问题,而是另一种选择;)
-
我知道。你是绝对正确的。但是告诉我们的老师。他坚信这是正确的做法:)
标签: php mysql sql select-query