Jump to content
  • 0

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


user
 Share

Question

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
Link to comment
Share on other sites

2 answers to this question

Recommended Posts

  • 0

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

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

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
Добавил вариант
  • Thanks 1
Link to comment
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
Answer this question...

×   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.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy