作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我的第一个问题。我搜索了很多文档,但找不到答案。
我有 3 张 table 。
product_main(with idx and name)<br />
proudct_attributes (with idx 'pid gid value)<br />
product_attributes_groups (with idx name) <br />
现在我尝试按属性过滤产品。我对单个属性没有问题,但我无法使用多个条件进行过滤,即(红色或蓝色,但只有新的)
SELECT `pid` FROM `product_attributes`
LEFT JOIN `product_main` ON `product_attributes`.`pid` = `product_main`.`idx`
LEFT JOIN `product_attributes_groups` ON `product_attributes`.`gid` = `product_attributes_groups`.`idx`
WHERE
(
(`product_attributes_groups`.`name` = 'color' AND `product_attributes`.`value` ='red' )
OR
(`product_attributes_groups`.`name` = 'color' AND `product_attributes`.`value` ='blue' )
)
AND
(`product_attributes_groups`.`name` = 'condition' AND `product_attributes`.`value` ='new' )
编辑:
这有助于:选择 pm
。idx
从 product_attributes
作为 pa
加入 product_main
作为pm
在 pa
.pid
= pm
.idx
加入 product_attributes_groups
作为 pig
在 pa
.gid
= pig
.idx
上按 pm
.idx
分组有 sum(pig
.name
= 'color' AND pa
.value
in ('red' , 'blue ')) > 0 和 sum(pig
.name
= 'condition' AND pa
.value
='used') > 0;
戈登的回答,稍作编辑。
最佳答案
您有一个“set-within-sets”查询,您试图在组内查找匹配项(产品的属性)。我喜欢通过聚合和 having
子句来解决这些问题:
select pm.pid
from product_attributes pa join
product_main pm
on pa.`pid` = pm.`idx` join
product_attributes_groups pig
on pm.`gid` = `pig`.`idx`
group by pm.pid
having sum(pig.`name` = 'color' AND `pa`.`value` in ('red' , 'blue')) > 0 and
sum(pig.`name` = 'condition' AND pa.`value` ='new') > 0;
having
子句中的每个条件都计算每个 pid
匹配一个条件的行数。
关于php - 在 MySQL 中使用多个 OR/AND 进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18532175/
我是一名优秀的程序员,十分优秀!