我有一个名为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=?)
最佳答案 使用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