gpt4 book ai didi

php - 在 MySQL 中使用多个 OR/AND 进行过滤

转载 作者:行者123 更新时间:2023-11-30 23:14:36 24 4
gpt4 key购买 nike

这是我的第一个问题。我搜索了很多文档,但找不到答案。
我有 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' )

编辑:

这有助于:选择 pmidxproduct_attributes 作为 pa 加入 product_main 作为pmpa.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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com