如何解决如何过滤具有多个条件的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:
- 品牌=英特尔
- 模型=酷睿i7
我已经尝试过了,但是它没有返回任何行,我想我应该使用JOIN。
SELECT * FROM `wp_product_details_fields`
WHERE `field` = 'brand' AND `value` = 'Intel' AND `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
,
使用OR
您应该尝试如下操作:
SELECT * FROM `wp_product_details_fields`
WHERE (`field` = 'brand' AND `value` = 'Intel') OR (`field` = 'model' AND `value` = 'Core i7')
,
我认为您必须重新考虑您的数据库结构,我建议您拥有模型领域和品牌领域。因此您可以执行简单的“选择”查询。并过滤行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。