Има няколко проблема с вашия код - чрез намаляване на гравитацията:
- трябва да изберете
от z_tmp_admin_system_settings
, а неот името
- колоната за групиране се нарича
category
, а неподдомейн
- тъй като принципът на заявката е да използва агрегиране, имате нужда от агрегатни функции за генерираните колони, като например
MAX()
; старите версии на MySQL толерират неизползването на агрегатна функция върху неагрегирани колони, но това не е нещо, с което трябва да свикнете - добра практика е да заобиколите имената на колоните със задни отметки, в случай че едно от имената се сблъска със запазена дума (това не е така във вашите примерни данни, но вероятно не е изчерпателно)
ОТЛИЧЕН
вероятно не е необходимо, освен ако не сте дублиралииме
s за категория (в този случай не се колебайте да го добавите обратно към кода по-долу)- Странична бележка:
IFNULL(..., NULL)
е без операция
Код:
SET SESSION group_concat_max_len =100000;SET @sql ='';SELECT GROUP_CONCAT( CONCAT('MAX(IF(z_tmp_admin_system_settings.name =''', name, ''', value, NULL)) AS ` ', име, '`'))INTO @sqlFROM z_tmp_admin_system_settings;SET @sql =CONCAT( 'SELECT category, ', @sql, ' FROM z_tmp_admin_system_settings GROUP BY category');PREPARE stmt FROM @sql;EXECUTE stmt;DEALLOCATE PREPARE stmt;
<предварителен код>| категория | 2fa | abc_дата_на_обработка | активиране_ново_одобряване_лице | активиране_нов_план | допълнителен_футер_за_лице || -------- | --- | ------------------- | ---------------------------- | -------------------- | ---------------------------- || акме | 0 | днес | 1 | 1 | |