【问题标题】:sql query that would return a table, and count other tables relevant to the results of the firstsql查询将返回一个表,并计算与第一个结果相关的其他表
【发布时间】:2014-02-10 02:59:28
【问题描述】:

我正在尝试为一个学校项目编写一个论坛,但我仍在为一些疑问而苦苦挣扎。 所以,基本上我有以下表格:

  1. 论坛(forum_id、forum_title、forum_description)
  2. topics (topic_id,forum_id(所属论坛), topic_content...等)
  3. 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


【解决方案1】:

问题可能是 10 个帖子与一篇文章相关,并且每个帖子的文章 ID 会出现 10 次,所以我想您需要计算不同的文章 ID

SELECT
`forums`.*,
COUNT(DISTINCT `topics`.`topic_id`) AS `num_of_topics`,
COUNT(DISTINCT `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`

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-14
    • 1970-01-01
    • 2021-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多