类别中的mysql产品选择

时间:2016-01-04 19:10:31

标签: mysql categories product

我有一个名为product_cats的表,相关列是

product_id,
cat_id

假设我们有类别1,2,3,4和5。

我需要cat_id 1和2以及(3或4或5)中的所有product_id。

此时我有一些工作方法,但他们都非常慢。

有人可以给我一些神秘的魔法吗?

编辑:

因此,产品需要同时属于1类和2类,以及3类,4类或5类。

这是我尝试更好地理解的一个尝试

SELECT
  p1.product_id
FROM
  product_cats p1 JOIN product_cats p2 ON ( p2.product_id = p1.product_id )  
  JOIN product_cats p3 ON ( p3.product_id = p1.product_id )  
  JOIN product_cats p4 ON ( p4.product_id = p1.product_id )   
WHERE
  (p1.category_id=? AND p2.category_id=? AND p3.category_id=?)
  OR 
  (p1.category_id=? AND p2.category_id=? AND p4.category_id=?)

2 个答案:

答案 0 :(得分:1)

要选择属于类别1和2的产品,您可以使用如下查询:

select
  product_id
from
 product_cats
where
  cat_id in (1,2)
group by
  product_id
having
  count(distinct cat_id)=2;

product_idcat_id上的索引应有助于改善效果:

alter table product_cats add index idx_product_cats (product_id, cat_id);

答案 1 :(得分:1)

使用Mysql,您可以使用带有group by子句的sumhaving函数来实现您的逻辑

select product_id
from product_cats
group by product_id
having sum(cat_id = 1) > 0
and sum(cat_id = 2) > 0
and sum(cat_id in(3,4,5)) > 0

上面的查询将返回product_ids,其中cat_id为1,cat_id为2,cat_id为3,4,5