嗨,我一直在努力解决这个问题几个小时,但我似乎无法绕过它......
看看这个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。
谢谢!
答案 0 :(得分:1)
我正在尝试搜索所有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
答案 1 :(得分:1)
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
答案 2 :(得分:0)
这应该足够聪明,以确定不同类别的数量,并选择具有该数量的不同类别的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