2012-05-25 2 views
1

Я пытаюсь создать фильтр, основанный на атрибутах. Предполагается, что это мультифильтр.Multi filter mysql

Моя таблица выглядит следующим образом:

product_id attribute_id attribute_option_id 
---------- ------------ ------------------- 
4   16   51 
4   13   28 
5   16   51 
6   16   51 

Если вы выбираете attribute_option_id 51, то я получу product_id 4, 5 и 6. Когда я выбираю attribute_option_id (ы) 51 и 28 я Виль получить product_id (ы) 4, 5 и 6. Это результат, который не нужен. В этом случае я бы только хочу PRODUCT_ID 4. Теперь я думал, что я мог бы решить эту проблему с помощью этой линии

WHERE product_attribute.Attribute_option_id IN ('51 ', '28') 

Но предполагалось, что это не решение.

Может кто-нибудь помочь мне с этим?

ответ

4
select a.product_id from (
    select product_id, count(*) as cnt 
    from mytable 
    where attribute_option_id in (51, 28) 
    group by product_id having count(*) =2) a 

должен сделать трюк.

+0

Спасибо за ваш ответ. Я получаю это сообщение об ошибке при попытке: # 1248 - Каждая производная таблица должна иметь свой собственный псевдоним – Lexperts

+0

+1 от меня за хороший sql. –

+0

+1 но вам не нужен подзапрос. (Если вы не хотите возвращать 'COUNT (*)', вы можете просто опустить его из предложения SELECT.) –

1
SELECT * 
FROM mytable 
WHERE product_id IN (SELECT a.product_id 
         FROM mytable a 
          INNER JOIN mytable b 
           ON a.product_id = b.product_id 
         WHERE a.attribute_option_id = '51' 
          AND b.attribute_option_id = '28') 
+0

Спасибо за ваш ответ. Это может быть решением. Но проблема в том, что это может быть более двух опций атрибутов атрибутов фильтра. Это означает, что я должен сделать для каждого атрибута option id новое внутреннее соединение? – Lexperts