2012-03-22 120 views
0

我有3個表格:鎮;村;農民......我需要計算每個村莊有多少農民,每個鎮有多少個村莊。我是新來的PHP和MySQL,所以我的代碼仍然是垃圾..到目前爲止,我已經做了查詢代碼:mySQL兩個COUNT在一個查詢中涉及3個表

$query = "SELECT *, COUNT(DISTINCT village.villageID) AS cnt_village, 
COUNT(farmer.farmerID) AS cnt_farmers 
FROM town LEFT JOIN village ON village.townID = town.townID 
LEFT JOIN farmer ON farmer.villageID = village.villageID 
GROUP BY town.townID 
ORDER BY town.townName"; 
$result = mysql_query($query); 

它已經輸出了正確的計數是這樣的:

----TOWN--------VILLAGES----FARMERS----- 
| Caibiran |  2  | 23  | 
| Culaba  |  7  | 39  | 
|  TOTAL |  9  | 62  | 

它運作良好,直到我嘗試搜索特定的城鎮。會發生什麼情況是Farmers列的值顯示指定城鎮的正確值。但整個表仍與其他城鎮的展示農民欄顯示爲0。

它顯示了這一點:

----TOWN--------VILLAGES----FARMERS----- 
| Caibiran |  2  | 23  | 
| Culaba  |  7  | 0  | 
|  TOTAL |  9  | 23  | 

但我真正想要的是這樣的:

----TOWN--------VILLAGES----FARMERS----- 
| Caibiran |  2  | 23  | 
|  TOTAL |  2  | 23  | 

但我不知道該怎麼做。我已經沒有想法了。請幫幫我。

+1

我不能說沒有測試,但嘗試刪除'LEFT JOIN's並嘗試一個普通的equijoin? – 2012-03-22 01:43:38

回答

1

這是否解決了問題?

SELECT *, COUNT(DISTINCT village.villageID) AS cnt_village, 
COUNT(farmer.farmerID) AS cnt_farmers 
FROM town 
JOIN village ON village.townID = town.townID 
JOIN farmer ON farmer.villageID = village.villageID 
GROUP BY town.townID 
ORDER BY town.townName 

由於不會有任何農民加入,應該從結果集中刪除行。

+0

謝謝,明白了...... :) – 2012-03-22 09:11:26