嗨,伙计,我已经想了好几个小时了,但我似乎无法理解它..
看看这个sql表..

我正在尝试搜索存在于所有 filter_cat_id 中的 product_id,因此在此示例中它将是 product_id 30,因为它与 filter_cat_id 1 2 和 3 一起存在。 Product_id 30 存在于同一个 filter_cat_id 中两次,否则我只是计算产品 ID,然后计算不同的猫 ID,并确保计数匹配。
有任何想法吗?这在mysql中可能吗?另一种选择是使用 PHP。
谢谢!
我正在尝试搜索存在于所有 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
SELECT
product_id, count(i.product_id) as t
FROM
(SELECT
*
FROM
tablename
GROUP BY product_id , filter_cat_id) as i
GROUP BY product_id
HAVING t = 3
这应该足够聪明,可以确定不同类别的数量,并选择具有该数量的不同类别的 product_id。
SELECT product_id
FROM
(SELECT DISTINCT product_id, filter_cat_id
FROM test.play) a
GROUP BY product_id
HAVING count(product_id) = (SELECT count(DISTINCT filter_cat_id) FROM test.play)
;
测试数据:

Query Result:
30
40