【问题标题】:MySQL query for shopping cart filterMySQL查询购物车过滤器
【发布时间】:2016-04-10 17:48:12
【问题描述】:

我正在使用下表作为购物车

id  product_id  attribute_id    value
----------------------------------------
1       1           1           A,B,C
2       2           1           B,C
3       3           1           C
4       1           2           200
5       2           2           150
6       3           2           300
7       1           3           RED
8       2           3           BLUE
9       3           3           RED,GREEN
10      1           4           YES
11      2           4           NO
12      3           4           NO

我可以从这个表中形成一个搜索结果。有一项按属性过滤搜索结果的规定。

属性可以包含以下类型的值:

  1. 数字 (250)
  2. 字符串(是/否)
  3. 字符串列表(A、B、C)

我需要一个查询来获取满足以下条件的 product_id 列表

  • attribute_id = 1 且值 = B 或 C
  • attribute_id = 2 和 value = 150
  • attribute_id = 4 和 value = NO

我提到了一个股票问题 (MySQL Multiple Where Clause) 并尝试但无法获得实际输出。

【问题讨论】:

  • 向我们展示您的尝试,这将有助于我们理解并且您可能比您想象的更接近解决方案

标签: mysql sql


【解决方案1】:

在您的WHERE 子句中使用OR,并使用方括号分隔每个条件。

SELECT id, product_id, attribute_id, value
FROM shoppingcart
WHERE (attribute_id = 1 AND value IN ('B', 'C'))
OR (attribute_id = 2 AND value = 150)
OR (attribute_id = 4 AND value = 'NO')

【讨论】:

  • 它适用于 OR 条件,但我需要的是 AND。所以用户想要过滤具有“C”和“RED”和“NO”的产品,所以它应该输出product_id 3
【解决方案2】:

试试这个:

SELECT product_id FROM table_name WHERE 

(attribute_id = 1 AND (
            (value LIKE 'B,%' OR value LIKE '%,B' OR value LIKE '%,B,%' OR value LIKE 'B')
            OR
            (value LIKE 'C,%' OR value LIKE '%,C' OR value LIKE '%,C,%' OR value LIKE 'C')
              )
) 

OR

(attribute_id = 2 AND value = '150')
OR

(attribute_id = 3 AND value = 'NO')

【讨论】:

  • 感谢您的回答。它适用于 OR 条件。我需要 AND 条件。例如:需要其属性值为“C”和“RED”和“NO”的product_id 所以它应该只输出product_id 3 你能帮帮我吗
猜你喜欢
  • 1970-01-01
  • 2012-04-10
  • 1970-01-01
  • 2012-05-11
  • 1970-01-01
  • 2011-04-09
  • 2015-04-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多