案例:
桌子:

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

祝你好运。

09-05 04:22