Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak zrobić to zapytanie eav, aby uzyskać wynik poziomy?

Istnieje kilka sposobów na zaimplementowanie tego. Coś takiego powinno działać wielokrotnie, łącząc się z powrotem w tabeli dla każdej wartości atrybutu:

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 oto Skrzypce .

Oto alternatywne podejście z wykorzystaniem MAX i GROUP BY, które osobiście preferuję:

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

Powodzenia.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Szyfrowanie ruchu MySQL w skryptach

  2. Automatycznie łap wyjątki dla PDO w PHP

  3. Blokowanie '0000-00-00' z pól daty MySQL

  4. Jak poprawnie używać PHP do kodowania obiektu MySQL do formatu JSON?

  5. Python, mysql.connector Błąd:brak zestawu wyników do pobrania z; cgitb pokazuje poprawną wartość przekazywaną do funkcji