2

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

看看这个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。

谢谢!

4

3 回答 3

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
于 2013-04-28T05:22:25.827 回答
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
于 2013-04-28T08:28:48.130 回答
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
于 2013-04-28T05:56:37.910 回答