mysql 类别 select 中的产品

mysql products in category select

我有一个名为product_cats的table,相关栏目是

product_id,
cat_id

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

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

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

有人可以对我施展 mysql 魔法吗?

编辑:

所以产品需要同时属于类别 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=?)

对于 select 类别 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);

使用 Mysql 您可以通过使用 group bysum 函数以及 having 子句

来实现您的逻辑
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

上面的查询将 return product_ids 其中有 cat_id 1 和 cat_id 2 并且 cat_id 可以是 3,4,5