2012-03-22 123 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