[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: создание запроса для фильтров на сайте
masterlelik
Есть две таблицы
1) Таблица хранит programm_id программы и filter_value значение фильтра
programm_id | filter_value
1 | 8
1 | 9
1 | 11
2 | 9
2 | 11
2 | 12
2) Таблица хранит фильтры filter_id и их значения filter_value
filter_id | filter_value
filter_id=1 - пол
filter_id=2 - возраст
filter_value=8 - мальчик
filter_value=9 - девочка
filter_value=11 - 5-10 лет
filter_value=12 - 11-15 лет
1 | 8
1 | 9
2 | 11
2 | 12

Как выбрать все программы, если на сайте выбраны фильтры со значениями filter_value
8, 9, 11, 12 должно выбрать обе программы 1 и 2
или
8, 11, 12 должно выбрать программы 1

Т.е. суть такая, что есть родительский filter_id и если выбрано хотя бы одно его значение, то это 1

Я пробовал так, но лли COUNT не по тому полю, или группировать по другому полю
SELECT `t1`.`programm_id`, count(`t2`.`filter_id`) AS cnt FROM `t_programm_filter` `t1`, `t_filters` `t2`
WHERE `t1`.`filter_value`=`t2`.`filter_value` AND t1.filter_value IN (8,9,11,12) GROUP BY `t2`.`filter_id` HAVING cnt>=2

P.S. cnt тут 2 и более, потому что в примере выбирается хотя бы одно значение каждого из двух фильтров

_____________
Kusss
SELECT 
t1.programm_id,
t2.filter_value
FROM
`t_programm_filter` AS t1,
`t_filters` AS t2
WHERE
t1.programm_id = t2.id AND
t1.filter_value IN (8, 9, 11, 12)
GROUP BY
t1.programm_id

Вроде так. Если будет дамп базы будет 100% рабочий вариант
masterlelik
@Kusss
а где в вашем запросе учитывается, что у программы должно быть хотя бы одно значение каждого фильтра?

_____________
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.