Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> создание запроса для фильтров на сайте
masterlelik  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пользователь
**

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 98
Пользователь №: 1297
На форуме: 10 лет, 5 месяцев, 17 дней
Карма:




Есть две таблицы
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 и более, потому что в примере выбирается хотя бы одно значение каждого из двух фильтров


--------------------
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1613
Пользователь №: 28976
На форуме: 5 лет, 11 месяцев, 28 дней
Карма: 102




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% рабочий вариант
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
masterlelik  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пользователь
**

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 98
Пользователь №: 1297
На форуме: 10 лет, 5 месяцев, 17 дней
Карма:




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


--------------------
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса