我有两张表,大致如下:
products product_attributes
================== ========================================
| id | name | | id | product_id | attribute | value |
================== ========================================
| 1 | product 1 | | 1 | 1 | size | big |
| 2 | product 2 | | 2 | 1 | colour | red |
| 3 | product 3 | | 3 | 2 | size | medium |
| 3 | product 3 | | 4 | 2 | age_range | 3-5 |
| .. | ... | | 5 | 2 | colour | blue |
================== | 6 | 3 | size | small |
| .. | ... | ... | ... |
========================================
产品可能有无限多的属性,这就是为什么它们被保存在单独的表中。
我希望能够提取出与多个(也是无限)属性条件匹配的不同产品,但我无法想象如何在不使用“或”条件的情况下做到这一点,然后使用某种计数来检查所有属性是否匹配。我相当确定这不是最好的方法,所以希望有人可以提供帮助?!
例如,查找尺寸=“中”且颜色=“蓝色”的产品(这将与上例中的产品 2 匹配)。
这是一个关系划分 http://www.simple-talk.com/sql/t-sql-programming/divided-we-stand-the-sql-of-relational-division/问题。
你建议的方式COUNT
可能是 MySQL 中最简单的
SELECT product_id
FROM product_attributes pa
WHERE (attribute='size' and value='medium')
OR (attribute='colour' and value='blue')
GROUP BY product_id
HAVING COUNT(DISTINCT CONCAT(attribute,value) ) = 2
还有另一种双倍的方法NOT EXISTS
在链接的文章中,但由于 MySQL 不支持 CTE,这将非常麻烦。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)