我正在尝试搜索存在于所有 filter_cat_id 中的 product_id,因此在此示例中它将是 product_id 30,因为它与 filter_cat_id 1 2 和 3 一起存在。
通常,这可以通过按 product_id 分组并使用HAVING COUNT(product_id) >= x
- 其中x是类别数来完成,
SELECT product_id FROM table GROUP BY product_id HAVING COUNT(product_id) >= 3
如果您事先不知道类别的数量(以便您可以将实际数量插入到查询中),您可以使用子查询获取该值,
SELECT product_id FROM table GROUP BY product_id
HAVING COUNT(product_id) >= (SELECT COUNT(DISTINCT category_id) FROM table)
编辑:好的,显然要搜索的 category_ids 来自某种搜索表单/过滤器机制。
在这种情况下,必须添加对项目的过滤——并且必须隐式嵌入要比较的数字,但这应该没问题。
SELECT product_id FROM table
WHERE category_id IN(1,2,3)
GROUP BY product_id
HAVING COUNT(product_id) >= 3