案例:
桌子:
product:
product_id|name |
------------------------
1 |iphone 4 |
2 |gallaxy 2 |
3 |blackbery 6 |
product_attribute:
id|product_id|attribute_id
--------------------------------------------------
1 |1 |2
2 |1 |6
. . .
attribute:
------------------------------
attribute_id|name |value|
1 |width |300
2 |width |320
3 |width |310
4 |height|390
5 |height|370
6 |height|380
应得到结果:
product_id|height|width
1 |380 |320
......................
编辑:
高度和宽度属性是产品属性中唯一的一部分-产品需要有动态能力,用户可以像在magento中那样在后端添加,因为我选择了eav db design。
如果可能的话,请写下问题,以防我们不知道产品的名称。
谢谢
最佳答案
有几种方法可以实现这一点。对于每个属性值,这样的操作应该可以在表上多次连接:
SELECT p.product_id,
a.value height,
a2.value width
FROM Product p
JOIN Product_Attribute pa ON p.product_id = pa.product_id
JOIN Attribute a ON pa.attribute_id = a.attribute_id AND a.name = 'height'
JOIN Product_Attribute pa2 ON p.product_id = pa2.product_id
JOIN Attribute a2 ON pa2.attribute_id = a2.attribute_id AND a2.name = 'width'
这里是Fiddle。
我个人更喜欢使用max和group by的另一种方法:
SELECT p.product_id,
MAX(Case WHEN a.name = 'height' THEN a.value END) height,
MAX(Case WHEN a.name = 'width' THEN a.value END) width
FROM Product p
JOIN Product_Attribute pa ON p.product_id = pa.product_id
JOIN Attribute a ON pa.attribute_id = a.attribute_id
GROUP BY p.product_id
祝你好运。