繁体   English   中英

如何过滤具有多个条件 MySQL 的行

[英]How to filter rows that has multiple condition MySQL

我有一张包含我的产品详细信息的表格

+-----+------------+--------+-------+---------+
| id  | product_id | cat_id | field | value   |
+-----+------------+--------+-------+---------+
| 166 |        121 |     12 | model | Core i7 |
| 164 |        121 |     12 | brand | Intel   |
| 172 |         15 |     12 | model | Core i5 |
| 170 |         15 |     12 | brand | Intel   |
+-----+------------+--------+-------+---------+
4 rows in set

现在我想编写一个查询,在以下条件下为我提供 product_id(s):

  1. 品牌 = 英特尔
  2. 型号 = 酷睿 i7

我试过这个,但它没有返回任何行,我想我应该使用 JOIN。

SELECT * FROM `wp_product_details_fields` 
WHERE `field` = 'brand' AND `value` = 'Intel' AND `field` = 'model' AND `value` = 'Core i7' 

使用group byhaving

select product_id
from wp_product_details_fields
where field in ('model', 'brand')
group by product_id
having max(field = 'model' and value = 'Core i7') = 1
   and max(field = 'brand' and value = 'Intel'  ) = 1

或者更好的是,使用元组相等:

select product_id
from wp_product_details_fields
where (field, model) in ( ('model', 'Core i7'), ('brand', 'Intel') )
group by product_id
having count(*) = 2

使用OR

你应该像下面这样尝试:

SELECT * FROM `wp_product_details_fields` 
WHERE (`field` = 'brand' AND `value` = 'Intel') OR (`field` = 'model' AND `value` = 'Core i7')

我认为你必须重新考虑你的数据库结构,我建议你有模型字段和品牌字段。 所以你可以做简单的“选择”查询。 并过滤行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM