2013-05-01 132 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