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

Zapytanie do tabeli przestawnej MySQL z dynamicznymi kolumnami

Jedynym sposobem w MySQL, aby zrobić to dynamicznie, jest użycie instrukcji Prepared. Oto dobry artykuł na ich temat:

Dynamiczne tabele przestawne (przekształcanie wierszy w kolumny)

Twój kod będzie wyglądał tak:

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(IF(pa.fieldname = ''',
      fieldname,
      ''', pa.fieldvalue, NULL)) AS ',
      fieldname
    )
  ) INTO @sql
FROM product_additional;

SET @sql = CONCAT('SELECT p.id
                    , p.name
                    , p.description, ', @sql, ' 
                   FROM product p
                   LEFT JOIN product_additional AS pa 
                    ON p.id = pa.id
                   GROUP BY p.id, p.name, p.description');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

Zobacz Demo

UWAGA:Funkcja GROUP_CONCAT ma limit 1024 znaków. Zobacz parametr group_concat_max_len



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL Dodaj unikalne ograniczenie

  2. Błąd krytyczny:wywołanie niezdefiniowanej funkcji session_register()

  3. Jak zbudować aplikację kolbową wokół już istniejącej bazy danych?

  4. Jak wyświetlić sortowanie kolumny w MySQL

  5. Jak zastosować metodę bindValue w klauzuli LIMIT?