Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: создание запроса для фильтров на сайте
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » создание запроса для фильтров на сайте

Страниц (1): [1]
 

1. masterlelik - 06 Февраля, 2017 - 15:53:37 - перейти к сообщению
Есть две таблицы
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 и более, потому что в примере выбирается хотя бы одно значение каждого из двух фильтров

 

Powered by ExBB FM 1.0 RC1