【发布时间】:2018-10-21 11:12:51
【问题描述】:
我有的桌子:
- 产品(ID、标题)
[1, '旧车'], [2, '新车'], [3, '未来车'])
- 属性(ID、名称)
[1, '品牌'], [2, '型号'], [3, '颜色']
- 属性值(attribute_id、product_id、值)
[1, 1, '丰田'], [1, 2, '本田'], [1, 3, '福特'], [1, 3, '红色'], [2, 3, '白色'], [3, 3, '红色']
我试过查询:
select p.*, a.name as attribute_name, av.value as attribute_value from attributes as a
join attribute_values as av on a.id=av.attribute_id
join products as p on av.product_id=p.id
where
((a.name='brand' and av.value='toyota') or (a.name='color' and av.value='red'))
它给出匹配或查询条件的每一行。
例如:
- [id:1, title:'旧车', attribute_name:'品牌', 属性值:'丰田']
- [id:1, title:'旧车', attribute_name:'color', 属性值:'红色']
- [id:3, title:'未来汽车', attribute_name:'color', 属性值:'红色']
在这里,找到的结果是:“旧车”和“未来车”,但我需要“旧车”而不是“未来车”。
这可以通过单个查询来完成吗?
【问题讨论】:
-
你想要的结果到底是什么?
-
我只是想确认您提到的记录是否正确。因为对于属性“模型”,您提到“新车”的“白色”。这是关于 Attribute_values 表
-
顺便说一句,这并没有什么不同,但我们通常会将实体(产品)列放在 EAV 表的开头。
-
@Simone 是的,产品与属性的关系保存在 Attribute_values 表中
-
@Strawberry 我不明白你的意思。