php - 如果项目有许多(动态)属性,则多个左连接

标签 php mysql sql

我有两个表,产品和属性。每个产品可以有很多属性!

当我必须找到具有多个属性的产品时,问题就开始了。

select * from `products` 
left join `pattributes` on `pattributes`.`products_id` = `products`.`id` 
where `products`.`status` = 1 
AND `products`.`sold` = 0 
AND `products`.`deleted` = 0 
AND `products`.`categories_id` = 30 
AND `pattributes`.`attributes_id` = 5 
AND `pattributes`.`values_id` = 10 
AND `pattributes`.`attributes_id` = 4 
AND `pattributes`.`values_id` = 15 
group by `products`.`id` 
order by `products`.`top` desc, 
`products`.`id` desc

因此,如果我正在寻找两个或多个 pattributes,它将返回 0 行。但如果我寻找一种属性,它就可以正常工作。

我不是 mysql 专家,不确定是否必须使用左连接来做到这一点。也许有人知道最好的解决方案?

添加了 SQL Fiddle - 也许会更容易 http://sqlfiddle.com/#!2/b3ada0

最佳答案

对多个 pattributes 使用 IN() ,与多个 values_id 相同

select * from `products` 
left join `pattributes` on `pattributes`.`products_id` = `products`.`id` 
where `products`.`status` = 1 
AND `products`.`sold` = 0 
AND `products`.`deleted` = 0 
AND `products`.`categories_id` = 30 
AND `pattributes`.`attributes_id` IN(5 ,4)// if type is varchar then IN('5' ,'4')
AND `pattributes`.`values_id` IN( 10,15 )
group by `products`.`id` 
order by `products`.`top` desc, 
`products`.`id` desc

关于php - 如果项目有许多(动态)属性,则多个左连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18959759/

相关文章:

javascript - AngularJS 和 PHP : upload my app on several servers after changes

mysql - 为什么 MySQL 不在用作 bool 值的 int 字段上使用索引?

php - mysql左连接两个表

mysql - 分组后的随机数据

sql - Yii2 和 Filter 都带有 CASES。是否可以?

java - UTF 字符的字符引用(实体)

php - MySQL 几个内部连接与子查询

PHP:使用准备好的语句并防止 SQL 注入(inject)与转义

mysql - DBVisualizer 不显示 SP 源代码

sql - 在 SQL Server 2016 中添加小计行作为汇总项