我有两张表大致如下:
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 |
| .. | ... | ... | ... |
========================================
Run Code Online (Sandbox Code Playgroud)
产品可能存在无限量的属性,这就是为什么它们保存在单独的表中的原因.
我希望能够提取出与MULTIPLE(也是无限)属性条件相匹配的不同产品,但是我不知道如何在不使用OR条件的情况下完成它,然后进行某种计数来检查所有属性是否匹配.我相当肯定这不是最好的方式,所以希望有人可以提供帮助?!
例如,找到size ='medium'和color ='blue'的产品(这将匹配上例中的产品2).
这是一个关系划分问题.
您建议的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
Run Code Online (Sandbox Code Playgroud)
NOT EXISTS在链接文章中还有另一种双重方法,但由于MySQL不支持非常繁琐的CTE.
| 归档时间: |
|
| 查看次数: |
2368 次 |
| 最近记录: |