MySQL多条件行筛选:如何查询符合品牌与型号条件的产品ID?
解决EAV表结构的多属性匹配查询问题
嘿,我懂你遇到的问题了——你用的是EAV(实体-属性-值)类型的表结构,这种结构里每条记录只存一个属性,所以你原来写的查询语句里,要求同一行的field同时等于brand和model,这根本不可能满足,自然查不到任何结果啦。
针对这种场景,有两种常用的解决方案,都能帮你找到同时满足brand = Intel且model = Core i7的product_id:
方法一:表自连接
把表自身连接两次,分别匹配不同的属性条件,通过product_id关联起来:
SELECT t1.product_id FROM wp_product_details_fields t1 JOIN wp_product_details_fields t2 ON t1.product_id = t2.product_id WHERE t1.field = 'brand' AND t1.value = 'Intel' AND t2.field = 'model' AND t2.value = 'Core i7';
这里t1负责匹配品牌条件,t2负责匹配型号条件,只有当同一个product_id在两个子集中都存在时,才会被筛选出来。
方法二:分组+HAVING子句
先筛选出所有符合任一条件的记录,再按product_id分组,确保分组里同时包含两个属性的记录:
SELECT product_id FROM wp_product_details_fields WHERE (field = 'brand' AND value = 'Intel') OR (field = 'model' AND value = 'Core i7') GROUP BY product_id HAVING COUNT(DISTINCT field) = 2;
这个思路是先把所有和目标属性相关的记录捞出来,然后分组后检查每个组里是不是刚好有2个不同的属性(也就是同时满足品牌和型号要求),这样就能精准定位到符合条件的产品ID。
如果你还想获取这些产品的所有详情信息,可以基于上面的结果再做一次查询,比如用子查询:
SELECT * FROM wp_product_details_fields WHERE product_id IN ( SELECT t1.product_id FROM wp_product_details_fields t1 JOIN wp_product_details_fields t2 ON t1.product_id = t2.product_id WHERE t1.field = 'brand' AND t1.value = 'Intel' AND t2.field = 'model' AND t2.value = 'Core i7' );
内容的提问来源于stack exchange,提问作者Hamed
相关产品推荐
相关产品推荐

