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-самый подходящий.

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

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

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

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


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

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

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

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

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

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

Войти

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

Войти сейчас

  • Спрашивают сейчас

  • Пишут сейчас

    • Есть несколько вариантов которые позволяют развиваться профессионально: Ask friend for help. Опросить друзей знакомых на предмет предлагаемых услуг, заявить о себе. Выполнить несколько простых проектов для опыта/портфолио. Тем самым продвигать себя в качестве специалиста (сарафанное радио) Freelance. Вход сложный. Зато на мелочах можно поднять опыт за символическую стоимость. Потом развивать свой аккаунт, "обрастать" клиентами и поднимать уровень квалификации. Важно: почитайте пару гайдов как получить заказ новичку, как оформить профиль и прочие рекомендации. Сайты по теме: https://freelansim.ru https://www.fl.ru https://www.upwork.com — я бы выбрал этот Remote. Full-time. Ещё один хороший вариант найти работу — утроится в компанию работать удалённо. Без территориально ограничения. Компания может быть из СНГ, с юр. лицом. Заключаете договор и сотрудничаете на ставку. Part-time. Тоже самое что и предыдущий пункт но формат сотрудничества на правах почасовой работы. Office. Работа в офисе на позции Junior с перспективой роста. Хорошо подойдут галеры по типу ЕПАМ, Ciklum, LuxSoft, и тд. Денег мало (в начале), но компенсируется опытом. За 9-12 месяцев можете вырасти в Middle. Дальше плыть будет легче. Для поиска работы для Remote и Office вариантов можно использовать стандартные инструменты, на пример: djinni.co или linkedin.com. Рекомендации к заполнению профилю/CV Опишите всё что можете предложить заказчику. Расскажите о своих скилах, что непосредственно Вы делали выполняя работу над тем или иным проектом. Расскажите о своём опыте, даже если он не значительный. Если опыта совсем мало, инвестируйте месяц-два и выполните несколько простых задач, которые Вы сможете показать заказчику. И профиль и CV должно быть на английском языке, в первую очередь, и лишь копия русскоязычная (у меня такой нет, так как рынок предполагает знание английского языка с уровня pre-intermediate)
    • Сидеть дома и развиваться до уровня Senior годами без реальной работы?! 
    • Факт есть факт — специалистов как было мало так и осталось. Можно выбирать любую интересующую себя нишу и развиваться в ней до уровня Senior и иметь на себя спрос в последствии.
  • Лучшие авторы

  • Текущие цели пожертвований