Mysql
 sql >> база данни >  >> RDS >> Mysql

Заявка за обобщена таблица на MySQL с динамични колони

Единственият начин в MySQL да направите това динамично е с Prepared оператори. Ето една добра статия за тях:

Динамични централни таблици (трансформиране на редове в колони)

Вашият код ще изглежда така:

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;

Вижте Демо

ЗАБЕЛЕЖКА:Функцията GROUP_CONCAT има ограничение от 1024 знака. Вижте параметър 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 5.7 напълно

  2. PHP - Защитени страници само за членове със система за вход

  3. Как да стартирате, рестартирате, проверявате състоянието и спирате MySQL сървъра

  4. Как да извадя часовете от дата и час в MySQL?

  5. Как да използвам LOAD_FILE за зареждане на файл в MySQL blob?