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_id
和 cat_id
上的索引应该有助于提高性能:
alter table product_cats add index idx_product_cats (product_id, cat_id);
使用 Mysql 您可以通过使用 group by
和 sum
函数以及 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
我有一个名为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_id
和 cat_id
上的索引应该有助于提高性能:
alter table product_cats add index idx_product_cats (product_id, cat_id);
使用 Mysql 您可以通过使用 group by
和 sum
函数以及 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