2013-05-01 130 views
1

我正在创建一个留言板并试图构建一个查询。我的数据库结构如下:MySQL多重计数和多个连接

表名:表行,表行

类:ID,名称
主题: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职位的数目,然后加入与由创建表的第一个加盟。是否有可能做我在做什么?如果是这样,我会正确地处理它吗?

回答

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 

...但得到所有职位&涉及的主题可能是服务器上的沉重。我会在一段时间内缓存它。

+0

谢谢!我会牢记这一点,尽管我现在不期待太多的活动。 – user2200770 2013-05-02 00:23:21