1

我尝试创建一个基于属性的过滤器。设想这是一个多过滤器。

我的表如下所示:

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(s) 51 和28 时,我将获得product_id(s) 4、5 和6。这是不想要的结果。在这种情况下,我只想要 product_id 4。现在我认为我可以通过这条线解决这个问题

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

但预计这不是解决方案。

有人可以帮我弄这个吗?

4

2 回答 2

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

应该做的伎俩。

于 2012-05-25T11:44:52.340 回答
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') 
于 2012-05-25T11:46:53.427 回答