我有一个名为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=?)
答案 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_id
和cat_id
上的索引应有助于改善效果:
alter table product_cats add index idx_product_cats (product_id, cat_id);
答案 1 :(得分:1)
使用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
上面的查询将返回product_ids,其中cat_id为1,cat_id为2,cat_id为3,4,5