【问题标题】:PHP MySQL Select where product has both filters [closed]PHP MySQL选择产品具有两个过滤器的位置[关闭]
【发布时间】:2013-12-01 12:52:42
【问题描述】:

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

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

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

过滤器表分为 3 列

谢谢

乐: 过滤器表如下所示:

标识 |产品编号 |价值观
1 |第841章181
2 |第841章156

我需要的是 SELECT product_id FROM filters WHERE values = 181 AND values = 156

我用 IN 试过,但不是我需要的,in is making OR not AND

【问题讨论】:

  • 你试过阅读mysql手册吗?
  • 是的,没有找到任何帮助
  • 您是否尝试过任何查询?请给他们看
  • 你已经尝试了什么? filter是什么(是id),values里面存储了什么,values的数据类型是什么,...?显示一些示例数据。
  • 我尝试使用 IN () 但它的作用类似于 OR 而不是 AND

标签: php mysql database select


【解决方案1】:

试试下面的例子(demo --> 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
;

【讨论】:

    猜你喜欢
    • 2014-11-26
    • 2013-10-20
    • 2015-10-22
    • 2017-04-16
    • 2023-03-05
    • 2023-03-18
    • 2015-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多