我制作留言板并尝试构建查询。我的数据库结构如下:
表名:表行,表行
类别: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计算帖子数量然后将其与第一个连接创建的表连接时,我开始感到困惑。有可能做我正在做的事情吗?如果是这样,我会正确地解决它吗?
答案 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
...但是所有帖子&涉及的主题可能在服务器上很重。我会把它缓存一段时间。