sql >> Databáze >  >> RDS >> Mysql

Jak udělat tento eav dotaz, aby byl horizontální výsledek

Existuje několik způsobů, jak to implementovat. Něco takového by mělo fungovat, když se pro každou hodnotu atributu připojí zpět na tabulku několikrát:

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'

A tady je Fiddle .

Zde je alternativní přístup pomocí MAX a GROUP BY, který osobně preferuji:

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

Hodně štěstí.



  1. MySQL:UNIQUE, ale DEFAULT NULL - povoleno vytvořením tabulky. Je povoleno vložit více než 1 NULL. Proč?

  2. Je možné migrovat z Realmu do Sqlite?

  3. Jak použít AJAX k nahrání velkého souboru CSV?

  4. Zabezpečení MySQL – využití práv pro přístup k datům pro bezpečnou instalaci