mysql基于AND搜索行

时间:2013-04-28 05:07:17

标签: php mysql

嗨,我一直在努力解决这个问题几个小时,但我似乎无法绕过它......

看看这个sql表..

enter image description here

我正在尝试搜索所有filter_cat_id中都存在的product_id,因此在此示例中它将是product_id 30,因为它与filter_cat_id 1 2和3一起存在.. Product_id 30在同一个filter_cat_id中存在两次,否则我只计算产品ID,然后计算不同的猫咪ID,并确保计数匹配。

有什么想法吗?这可能在mysql中吗?另一种选择是使用PHP。

谢谢!

3 个答案:

答案 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)
;

测试数据:

enter image description here

Query Result:
30
40