user

Выбор значений при множественном фильтре

Рекомендуемые сообщения

product_id filter_id
1 1
1 2
2 3
3 1
3 2
3 3
3 4
4 1
4 3
4 4

Здравствуйте,вопрос следующий.

Не знаю,как правильно составить запрос.

Есть множественное значение фильтра,например:

filter_id=1,3,4.

Это должно дать значения product_id=3,4.

Соответственно,filter_id=1,2 дает product_id=1,3.

То есть выбираются продукты,по которым есть все значения фильтра.

Но это не все.

Фильтр может быть таким:

filter_id=3||4.

Что даст product_id=2,3,4.

То есть,одно из нескольких значений.

Или filter_id=2||3,4,что дает product_id=3,4.

Надеюсь,понятно описал.

Буду благодарен за помощь.

Изменено пользователем user

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

У вас сама архитектура вроде бы не правильная. 

по первой части как бы так не пришлось воротить

SELECT products.product_id FROM 
    `test` products 
LEFT JOIN  `test` filter_1 ON products.product_id = filter_1.product_id
LEFT JOIN  `test` filter_2 ON products.product_id = filter_2.product_id
LEFT JOIN  `test` filter_3 ON products.product_id = filter_3.product_id
WHERE 
    filter_1.`filter_id` = 1 AND
    filter_2.`filter_id` = 3 AND
    filter_3.`filter_id` = 4 
GROUP BY products.`product_id`

UPD: Ещё можно как то так, но всё равно мне не нравится

SELECT DISTINCT product_id FROM 
    `test`   
WHERE 
    `filter_id` IN (1,3,4)
GROUP BY `product_id`
HAVING COUNT(`filter_id`) = 3

по второй хватит просто

SELECT product_id FROM 
    `test`   
WHERE 
    `filter_id` IN (3, 4)  
GROUP BY `product_id`

 

Изменено пользователем Николя223
Добавил вариант
  • Thanks 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вариант с HAVING COUNT-самый подходящий.

Работает,как надо.

Спасибо большое.)

Архитектуру не я делал.)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас