【问题标题】:MySQL multiple counts and multiple joinsMySQL 多重计数和多重连接
【发布时间】:2013-05-02 05:18:52
【问题描述】:

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

表名:表行、表行

类别: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 计算帖子数量并将其与第一次连接创建的表连接时,我开始感到困惑。有可能做我正在做的事情吗?如果是这样,我的做法是否正确?

【问题讨论】:

    标签: mysql join


    【解决方案1】:
    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
    

    ...但是获取所有所涉及的帖子和主题可能会对服务器造成负担。我会在某处缓存一段时间。

    【讨论】:

    • 谢谢!我会记住这一点,尽管我现在根本不期望有太多活动。
    猜你喜欢
    • 2012-10-29
    • 2021-07-29
    • 1970-01-01
    • 2012-02-10
    • 2012-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多