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
Добавил вариант

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


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

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

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

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

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

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


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

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

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

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

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

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

Войти

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

Войти сейчас

Карта разработчиков

Карта участников

Отметь себя на карте для поиска или предложения работы