2011-04-18 49 views
1

我正在用Codeigniter和MySQL構建博客。我有這個問題,我有一個帖子和一個分類表。我也有一個post_categories的交叉引用表。我想要做的是獲得所有類別的名稱和他們名下的帖子數量。類別發佈數

示例輸出將是:你好世界(1)測試(0)等

我有一個很難找到什麼是SQL查詢,將參加三個表,讓我計數,和我我也很難包裝如何做出這個查詢。

這裏是我的表模式:

blgpost 
==== 
id 
*Other schema unimportant 

blgpostcategories 
================= 
postid 
categoryid 

blgcategories 
========== 
id 
name 
*Other schema unimportant 

回答

3

這應該給你你想要的輸出....

SELECT c.name, COUNT(p.id) FROM 
blgcategories c 
INNER JOIN blgpostcategories pc ON c.id = pc.categoryid 
INNER JOIN blgpost p ON pc.postid = p.id 
GROUP BY c.id 
+0

太棒了!正是我需要的!不知道爲什麼我很難理解這一點: - /將標記爲答案,當它也允許我:) – 2011-04-18 13:01:49

1

你並不需要加入三個表 - 在blgpost表沒有任何你需要的信息。

SELECT COUNT(*), blgcategories.name 
FROM blgcategories INNER JOIN blgpostcategories 
ON blgcategories.id=blgpostcategories.categoryid 
GROUP BY blgcategories.id; 
+0

你說得對!哇!現在我感到很蠢: -/lol! – 2011-04-18 13:06:27

0
SELECT name, COUNT(pc.id) 
FROM blgcategories c 
LEFT JOIN 
     blgpostcategories pc 
ON  pc.categoryid = c.id 
GROUP BY 
     c.id 

使用LEFT JOIN將顯示0空類別(那些沒有鏈接到他們的職位),而不是忽略它們。