如何筛选具有多个条件 MySQL 的行
How to filter rows that has multiple condition MySQL
我有一个 table 包含我的产品详细信息
+-----+------------+--------+-------+---------+
| 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):
- 品牌=英特尔
- 型号=酷睿i7
我试过这个,但它没有 returns 任何行,我想我应该使用 JOIN。
SELECT * FROM `wp_product_details_fields`
WHERE `field` = 'brand' AND `value` = 'Intel' AND `field` = 'model' AND `value` = 'Core i7'
使用OR
你应该像下面这样尝试:
SELECT * FROM `wp_product_details_fields`
WHERE (`field` = 'brand' AND `value` = 'Intel') OR (`field` = 'model' AND `value` = 'Core i7')
使用group by
和having
:
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
我认为你必须重新考虑你的数据库结构,我建议你有模型字段和品牌字段。所以你可以做简单的 'select' 查询。并过滤行。
我有一个 table 包含我的产品详细信息
+-----+------------+--------+-------+---------+
| 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):
- 品牌=英特尔
- 型号=酷睿i7
我试过这个,但它没有 returns 任何行,我想我应该使用 JOIN。
SELECT * FROM `wp_product_details_fields`
WHERE `field` = 'brand' AND `value` = 'Intel' AND `field` = 'model' AND `value` = 'Core i7'
使用OR
你应该像下面这样尝试:
SELECT * FROM `wp_product_details_fields`
WHERE (`field` = 'brand' AND `value` = 'Intel') OR (`field` = 'model' AND `value` = 'Core i7')
使用group by
和having
:
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
我认为你必须重新考虑你的数据库结构,我建议你有模型字段和品牌字段。所以你可以做简单的 'select' 查询。并过滤行。