MySQL多重计数和多个连接

时间:2013-05-01 21:09:56

标签: mysql join

我制作留言板并尝试构建查询。我的数据库结构如下:

表名:表行,表行

类别:id,name
主题:id,categoryid
帖子:id,topicid

在主页上,我想列出每个类别,每个类别中的主题数量和帖子数量。我查看了一些使用多个连接的查询,但我在将语法应用到我的情况时遇到了问题。

以下是我提出的建议:

SELECT `categories`.`id`, `categories`.`name`,  
    SELECT COUNT(DISTINCT `topics`.`id`) 
    FROM `topics`
    WHERE `topics`.`categoryid` = `categories`.`id`
    AS `numtopics`,
    SELECT COUNT(DISTINCT `posts`.`id`)
    FROM `posts`
    WHERE `posts`topicid` = `topics`.`id` 
    AS `numposts`
FROM `categories` 
JOIN `topics` ON `categories`.`id` = `topics`.`categoryid` 
JOIN `posts` ON `topics`.`id` = `posts`.`topicid`
;

当我尝试根据topicid计算帖子数量然后将其与第一个连接创建的表连接时,我开始感到困惑。有可能做我正在做的事情吗?如果是这样,我会正确地解决它吗?

1 个答案:

答案 0 :(得分:2)

SELECT `categories`.`id`, `categories`.`name`,
   COUNT(DISTINCT topics.id) as topics,
   COUNT(DISTINCT posts.id) as posts
FROM `categories` 
LEFT JOIN `topics` ON `categories`.`id` = `topics`.`categoryid` 
LEFT JOIN `posts` ON `topics`.`id` = `posts`.`topicid`
GROUP BY categories.id

...但是所有帖子&涉及的主题可能在服务器上很重。我会把它缓存一段时间。