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

时间:2013-12-01 12:52:43

标签: php mysql database select

我正在尝试获取包含URL

中的两个过滤器的产品

例如我有:www.example.com/product-name?filters=181,156

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

过滤器表格分为3列

感谢

LE: 过滤器表看起来像:

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

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

我尝试使用IN但不是我需要的,正在制作OR而不是

1 个答案:

答案 0 :(得分:1)

尝试以下示例(演示 - > 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
;