2012-03-22 2 views
0

У меня есть 3 таблицы: Town; Деревня; Фермеры ... и мне нужно СЧИТАТЬ, сколько Фермеров есть в Деревне, и сколько Деревн есть для Города. Я новичок в PHP и MySQL, так что мой код до сих пор мусор .. До сих пор я сделал код для запроса:mySQL два COUNTS в одном запросе с участием 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? –

ответ

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

Спасибо, получилось ... :) –

Смежные вопросы