Jump to content
  • Sign Up
user

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

Recommended Posts

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.

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

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

Edited by user

Share this post


Link to post
Share on other sites
Николя223

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

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

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`

 

Edited by Николя223
Добавил вариант

Share this post


Link to post
Share on other sites
user

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

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

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Member Statistics

    46,895
    Total Members
    1,451
    Most Online
    Neovo
    Newest Member
    Neovo
    Joined
  • Recently Browsing   0 members

    No registered users viewing this page.

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

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

    • DevCube
      Привет! Меня зовут Евгения и я ищу талантливых программистов в компанию DevCube. https://mydevcube.com/ Это международная компания, которая занимается DevOps, web и software разработками. На данный момент в команду требуются Full stack .NET (Junior & Senior) — 3+ year of commercial experience; — Strong knowledge of Angular 5+; — Strong knowledge of Typescript; — Experience with HTML/HTML5, CSS/CSS3, SCSS; — Good understanding of Git; — Conversational English. Будет плюсом: VB experience Условия: Удаленная работа full-time Зарплата от 10-20$/час по результатам собеседования. Обязательное условие - быть на связи до 21-22:00 по Москве. Для отклика прошу писать на почту: [email protected]
    • DevCube
      Привет! Меня зовут Евгения и я ищу талантливых программистов в компанию DevCube. https://mydevcube.com/ Это международная компания, которая занимается DevOps, web и software development. На данный момент в команду требуются PHP developers (Junior & Senior) Requirements: — 3+ year of commercial experience; — Strong knowledge PHP 7+ — Framework knowledge — Conversational English — CSS, Json, HTML5 Будет плюсом: Shopify implementation expertise. Условия: Удаленная работа full-time Зарплата от 10-20$/час по результатам собеседования. Обязательное условие - быть на связи до 21-22:00 по Москве. Для отклика прошу писать на почту: [email protected]
    • oleg126
      Подскажите пожалуйста, как позиционировать элемент на всю видимую область окна браузера? Есть слайдер, в котором крутятся картинки, и есть скрипт, благодаря которому картинка увеличивается, но не могу понять относительно какого элемента он позиционируется. <div class="sl_slider"> <div class="sl_img"> <img class="image" src="img/001-1.jpg" alt="001-1"> </div> <div class="sl_img"> <img class="image" src="img/002-2.jpg" alt="002-2.jpg"> </div> <div class="sl_img"> <img class="image" src="img/001-1.jpg" alt="001-1"> </div> <div class="sl_img"> <img class="image" src="img/002-2.jpg" alt="002-2.jpg"> </div> <div class="sl_img"> <img class="image" src="img/001-1.jpg" alt="001-1"> </div> <div class="sl_img"> <img class="image" src="img/002-2.jpg" alt="002-2.jpg"> </div> </div> .popup { position: absolute; height:100%; width:100%; top:0; left:0; display:none; text-align:center; } .popup_bg { background:rgba(0,0,0,0.4); position:absolute; z-index:1; height:100%; width:100%; } .popup_img { position: relative; margin:0 auto; z-index:2; max-height:94%; max-width:94%; margin:1% 0 0 0; } В классе popub выводится и позиционируется изображение, но как можно прописать его позиционирование на видимую обасть браузера? Решил  position: fixed;  у классов .popub_bg и .popub_img и margin выровнять как нужно. Может кому пригодится. 
  • Popular Contributors

    Nobody has received reputation this week.

×
×
  • Create New...