Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Konvertieren der MySQL-Ergebnismenge von Zeilen in Spalten

Mmmm ... EAVs. Einer der vielen Gründe, EAVs (entity-attribute_value) zu vermeiden, ist, dass sie schwieriger zu melden und abzufragen sind. Wenn die gewünschten Attribute jedoch im Voraus bekannt sind, können Sie Folgendes tun:

Select id
    , Min( Case When name = 'Make' Then attribute_value End ) As Make
    , Min( Case When name = 'Year' Then attribute_value End ) As Year
    , Min( Case When name = 'Type' Then attribute_value End ) As Type
    , Min( Case When name = 'Axles' Then attribute_value End ) As Axles
    , Min( Case When name = 'Size' Then attribute_value End ) As Size
    , Min( Case When name = 'Frame' Then attribute_value End ) As Frame
    , ...
From attributes
Where name In('Make','Year','Type','Axles','Size','Frame',....)
Group By id

Jetzt hat MySQL einen GROUP_CONCAT, mit dem Sie mehrere Werte für dasselbe Attribut zu einer Liste verketten können, wenn Sie dies zulassen (z. B. wenn eine Entität mehrere Make-Attribute haben kann).