2014-01-20 104 views
1

的結果相關我正在努力爲一個學校項目編寫一個論壇,我仍然在努力處理一些查詢。 所以,基本上我有以下表格:SQL查詢,將返回一個表,並計算其他表與第一個

  1. 論壇(forum_id,FORUM_TITLE,forum_description)
  2. 主題(topic_id,forum_id(在它屬於論壇),topic_content ...等)
  3. 帖子(post_id,topic_id(它屬於的主題)等)

我需要的是一個查詢,它將顯示主頁面中的所有論壇並統計所有主題,並將其與並計算屬於所有主題的所有帖子o相關論壇。

這是我想出了迄今:

SELECT 
`forums`.*, 
COUNT(`topics`.`topic_id`) AS `num_of_topics`, 
COUNT(`posts`.`post_id`) AS `num_of_posts` 

FROM `forums` 

LEFT JOIN `topics` ON `topics`.`forum_id` = `forums`.`forum_id` 
LEFT JOIN `posts` ON `posts`.`topic_id` = `topics`.`topic_id` 

GROUP BY `forums`.`forum_id` 

出於某種原因,該查詢返回,而奇異值。當有一個主題且沒有屬於該主題的帖子時,它正確地返回1爲主題,0爲帖子。但是,當我添加更多相關帖子時,它也會增加主題的數量。基本上,它將主題的數量等同於帖子的數量,所以如果帖子大於0,我總是得到x個主題和x個帖子。

任何想法?

+0

你能爲加起來SQL小提琴未來10倍你的問題與樣本數據集 –

+0

提示:典型的論壇軟件不計算它們。他們只是將它與論壇信息一起存儲。不是直接回答你的問題,而是一個替代方案;) – MueR

+0

我知道。你是絕對正確的。但要告訴我們的老師。他堅信這是正確的方式:) –

回答

1

可問題是,10個職位涉及到一個文章,文章編號與每個崗位,所以我想你需要統計不同的文章IDS

SELECT 
`forums`.*, 
COUNT(DISTINCT `topics`.`topic_id`) AS `num_of_topics`, 
COUNT(DISTINCT `posts`.`post_id`) AS `num_of_posts` 

FROM `forums` 

LEFT JOIN `topics` ON `topics`.`forum_id` = `forums`.`forum_id` 
LEFT JOIN `posts` ON `posts`.`topic_id` = `topics`.`topic_id` 

GROUP BY `forums`.`forum_id` 
+1

像一個魅力工作。謝謝。 –

相關問題