【问题标题】:mySQL search multiple values in same column combinedmySQL搜索同一列中的多个值组合
【发布时间】:2018-05-23 01:40:53
【问题描述】:

我正在尝试基于同一个表中的多个值实现简单的输出,并让它返回产品 ID:

我用过

SELECT * FROM
dh_product_properties
WHERE prod_id IN (SELECT prod_id FROM dh_product_properties
       WHERE (prod_prop_value = 'iPad Mini 3' AND
       prod_prop_value = 'Silver'));

希望它会返回任何包含 Silver 和 iPad Mini 3 的行 (Prod_id)。

这是一个表格示例:

+------------+--------------------------------------+----------+--------------------------------------+
| id,prod_id |                prod_                 |   sku    |           prod_prop_value            |
+------------+--------------------------------------+----------+--------------------------------------+
|       3946 | ddd329ec-4323-4381-b683-09e3e2b71b34 | Apple033 | Grade A iPad Mini: Fully packaged... |
|       3947 | ddd329ec-4323-4381-b683-09e3e2b71b34 | Apple033 | 3                                    |
|       3948 | ddd329ec-4323-4381-b683-09e3e2b71b34 | Apple033 | Retina Display                       |
|       3949 | ddd329ec-4323-4381-b683-09e3e2b71b34 | Apple033 | Finger Print Sensor                  |
|       3999 | 85799e94-e9f9-4689-95a5-2a2e742af43d | Apple011 | 32GB                                 |
|       4000 | 85799e94-e9f9-4689-95a5-2a2e742af43d | Apple011 | Bluetooth                            |
|       4001 | 85799e94-e9f9-4689-95a5-2a2e742af43d | Apple011 | TRUE                                 |
|       4002 | 85799e94-e9f9-4689-95a5-2a2e742af43d | Apple011 | Integrated Speakers                  |
|       4003 | 85799e94-e9f9-4689-95a5-2a2e742af43d | Apple011 | White with Silver                    |
|       4004 | 85799e94-e9f9-4689-95a5-2a2e742af43d | Apple011 | Built-In Rear Camera                 |
|       4005 | 85799e94-e9f9-4689-95a5-2a2e742af43d | Apple011 | 100                                  |
+------------+--------------------------------------+----------+--------------------------------------+

在阅读了其他人之后,我也有这个:

SELECT prod_id
FROM dh_product_properties
WHERE prod_prop_value = 'iPad Mini 3' AND prod_prop_value IN ('Silver') 
GROUP BY prod_id;

但我得到的所有记录都持有 iPad Mini 3 或 Silver,而不是合并。

任何人都可以建议一种方法来做到这一点。知道可以,但是不知道怎么搜索。

我在 Google 中尝试过: mysql多次AND mysql在一列中选择多个值

没有一个答案真正符合我的要求。

更新

如果我们使用上面的示例。 Apple033 是 iPad Mini 3,Apple011 是 iPad Mini 2。如果我们搜索 iPad Mini 2,White with Silver,它应该只带回 Apple011。目前它什么也没带回来,或者,每件物品都带有白色和银色,或 iPad Mini 2。

谢谢

添加

【问题讨论】:

  • SQL 查询中缺少右括号。这只是复制和粘贴错误吗?
  • 在您尝试使用 like 而不是 IN 的第二个查询中。
  • @BadAddy,显示预期结果的外观
  • @RomanPerekhrest Hiya。它应该只给我一个 prod_id,满足值条件。

标签: mysql select


【解决方案1】:

如果您希望所有组同时满足这两个条件,则需要发布聚合过滤

SELECT  prod_ FROM dh_product_properties
GROUP BY  prod_
HAVING SUM(prod_prop_value = 'iPad Mini 3')>0
AND SUM(prod_prop_value = 'Silver')>0

【讨论】:

  • 我可以添加更多条件吗?例如使用这个过滤?
【解决方案2】:

你试过这个查询吗?如果我正确理解您的问题,您希望返回任何包含“Silver”和“iPad Mini 3”字样/短语的行。对吗?

SELECT prod_id FROM dh_product_properties WHERE (prod_prop_value LIKE '%iPad Mini 3%' AND prod_prop_value LIKE '%Silver%')

了解您要在结果中查找的内容将有助于制定正确的查询。

【讨论】:

  • 没错。您可能会注意到,每一行都有一个 prod_id,这是该产品的所有属性。因为它们会波动,所以它们位于表格中,其中每一行都是一个属性。我似乎无法做的是匹配倍数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-03
相关资源
最近更新 更多