1

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

表名:表行、表行

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

4

1 回答 1

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

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

于 2013-05-01T21:18:52.777 回答