PHP MySQL选择产品同时具有两个过滤器的位置


PHP MySQL Select where product has both filters

我正在尝试获得在URL 中同时具有两个过滤器的产品

例如,我有:www.example.com/product-name?过滤器=181156

我需要从数据库中选择具有这两个值的产品。

过滤器表分为3列

感谢

LE:过滤器表看起来像:

id | product_id |值
1 | 841 | 181
2|841|156

我需要的是SELECT product_id FROM过滤器WHERE values=181 AND values=156

我尝试了IN,但不是我需要的,IN正在进行OR not AND

尝试以下示例(演示-->http://www.sqlfiddle.com/#!2/1de9c9/8)

第一个是使用EXISTS操作符

SELECT distinct product_id
FROM filters f
WHERE
   EXISTS (
      SELECT id FROM filters f1
      WHERE f.product_id = f1.product_id
        AND f1.`values` = 181
   )
 AND
   EXISTS (
      SELECT id FROM filters f1
      WHERE f.product_id = f1.product_id
        AND f1.`values` = 156
   )
;

第二个是JOIN操作符

SELECT f1.product_id
FROM filters f1
JOIN filters f2
ON f1.product_id = f2.product_id
WHERE
  f1.`values` = 181
  AND
  f2.`values` = 156;

第三个使用GROUP BY和HAVING

SELECT product_id
FROM filters
WHERE `values` IN (181,156)
GROUP BY product_id
HAVING COUNT(*) = 2
;