2013-10-24 3 views
0

У меня есть таблицы со следующей структурой.получение количества каждой категории, отфильтрованной по полю другой таблицы

AD_TABLE -

   ID|NAME|CAT_ID|TYPE 
       1| car | C0101|Sale 
       2|bike | C0201|Want 

CAT_TABLE -

   ID |NAME   |PARENT|LEVEL 
       C0100|Vehicle  |C0100 | 0 
       C0101|Car   |C0100 | 1 
       C0200|Bike/Scooters |C0100 | 1 
       C0201|Bike   |C0200 | 2 
       C0202|Scooter  |C0200 | 2 

мне нужно получить количество рекламных объявлений каждой категории, я написал следующий запрос.

SELECT `CAT_TABLE`.`ID`,`CAT_TABLE`.`NAME`,`CAT_TABLE`.`LEVEL`,`CAT_TABLE`.`PARENT`, COUNT(`AD_TABLE`.`ID`) 
FROM `CAT_TABLE` 
LEFT JOIN `AD_TABLE` ON `AD_TABLE`.`CAT_ID`=`CAT_TABLE`.`ID` 
WHERE (`CAT_TABLE`.`ID`='C0100' OR `CAT_TABLE`.`PARENT`='C0100') AND `AD_TABLE`.`TYPE`='0' 
GROUP BY `CAT_TABLE`.`ID` 

я получил кол каждой категории правильно, но после включения AD_TABLE . type` = «0» в категории где положение, которое не имеют АЗ игнорировались. Мне нужно, чтобы получить все категории, даже если счетчик равен 0.

+0

Если вы хотите считать 'NULL's, а также, использовать' COUNT (*) '. –

+0

COUNT (*) не работает. Проблема заключается в условии WHERE -> 'AD_TABLE' .'TYPE' = '0'. Если я оставлю это, я получаю счет правильно, но он будет учитывать и другие типы. – codeGEN

ответ

1

попробовать этот

SELECT  `CAT_TABLE`.`ID`,`CAT_TABLE`.`NAME`,`CAT_TABLE`.`LEVEL`,`CAT_TABLE`.`PARENT`,  COUNT(`AD_TABLE`.`ID`) 
    FROM  `CAT_TABLE` 
    LEFT JOIN `AD_TABLE` 
    ON   `AD_TABLE`.`CAT_ID`=`CAT_TABLE`.`ID` 
    AND  `AD_TABLE`.`TYPE`='0' -- Write and here..<br/> 
    WHERE  (`CAT_TABLE`.`ID`='C0100' OR `CAT_TABLE`.`PARENT`='C0100') 
    GROUP BY `CAT_TABLE`.`ID` 
+0

это сработало спасибо. Есть ли способ получить добавление счета для каждого. Например: количество транспортных средств должно быть дополнением автомобилей и мотоциклов/скутеров. И количество мотоциклов/скутеров должно быть дополнением к велосипедам и скутерам. – codeGEN

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