2012-03-22 12 views
0

私は3つのテーブルを持っています。村;農民...そして、私は村あたりの農民の数と町あたりの村の数を計算する必要があります。mySQL 2つの勘定に3つのテーブルが含まれている1つのクエリ

$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  | 
私は、クエリのコードを行っているこれまでのところ..私はPHPとMySQLへの新たなんだ、だから私のコードはまだゴミです

特定の町を検索しようとするまでうまくいきます。 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を試してみませんか? –

答えて

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

ありがとう、それが... :) –

関連する問題