> Создание запроса при помощи count+having

mastrelelik

Новичок
Создаю расширенный поиск с группами параметров:
Например:
1) Вид работ (поле cat_id)
1, пение (поле value)
2, рисование (поле value)
3, чтение (поле value)
2) Возраст детей (поле cat_id)
4, 5 лет (поле value)
5, 10 лет (поле value)
6, 12 лет (поле value)

есть таблица хранящая для каждой набор параметров
user_id | mediumint(8)
cat_id | mediumint(8)
value | mediumint(8)

Задача создать запрос для поиска, который в ХТМЛе состоит из чекбоксов.
Когда поиск состоял из одного блока, то находил всех детей, которые умели петь и рисовать запросом
select user_id, count(user_id) as cnt from t_child where value in (1, 2) group by user_id having cnt>1

А вот когда добавился второй блок, то не получается создать запрос. Как можно сделать одним запросом?
 

mastrelelik

Новичок
Решил вопрос.

Сначала не работающий запрос у меня выглядел:
select distinct `user_id`, count(`cat_id`) as cnt from `t_child` where (((`cat_id`='2' and `value`='1') or (`cat_id`='2' and `value`='2')) or ((`cat_id`='1' and `value`='4')) ) group by `t1`.`id` having cnt > 1

Но, если мне надо было найти детей 5 лет, которые умеют и петь, и рисовать.
То он также находил и 10летних детей, потому что было два true в видах работ

И понял, что не хватает distinct в count-е и поставив count(distinct `cat_id`) стало нормально и очень шустро находить.

P.S. если кто-то предложит более красивое решение, буду рад обсудить.
 
Сверху