MySQL 连接表和使用 COUNT 函数的问题

Posted

技术标签:

【中文标题】MySQL 连接表和使用 COUNT 函数的问题【英文标题】:Trouble with MySQL joining tables and using COUNT function 【发布时间】:2011-05-09 15:16:16 【问题描述】:

我正在尝试建立一个由三个表格组成的论坛。一个论坛表、一个主题表和一个帖子表。

在显示所有论坛的页面上,我希望它显示每个论坛的主题数量,以及该论坛中的帖子数量。很标准的东西。但是,我在使用 mysql 查询时遇到了一些问题。这是我正在使用的:

SELECT f.* , COUNT(t.topic_id) AS topics, COUNT(p.post_id) AS posts
FROM forums AS f
LEFT JOIN forums_topics AS t ON f.forum = t.forum_id
LEFT JOIN forums_posts AS p ON t.topic_id = p.topic_id
GROUP BY f.forum

这将为每个论坛返回一行,但主题计数和帖子计数返回彼此相等。帖子数是正确的,所以问题出在主题数上。

表格的结构是forums_posts 包含它所属主题的id 号,它不包含它所属论坛的id 号。 forums_topics 表包含其所属论坛的 id 号。

如何更正我的查询?如果我在 forums_posts 表中添加帖子所属的 forum_id 会更好吗?

感谢您的建议。

【问题讨论】:

【参考方案1】:

问题是COUNT(t.topic_id) 将计算主题ID。您需要计算不同的主题 ID 数量。

有点像

SELECT f.* , COUNT( DISTINCT (t.topic_id) ) ...

【讨论】:

Doh,我想它会像那样简单。非常感谢。 欢迎您。如果这解决了您的问题,请将问题标记为已回答。

以上是关于MySQL 连接表和使用 COUNT 函数的问题的主要内容,如果未能解决你的问题,请参考以下文章

CI MySQL查询连接表和where语句不返回所有行

MySQL 存储函数 - 动态/变量表和列名

MySQL - 两个表和两个连接

SQL sum和count的连接关系

mysql优化要点

MySQL - 使用 COUNT 在同一个表上进行完全外连接