Ada beberapa masalah dengan kode Anda - dengan mengurangi gravitasi:
- Anda harus memilih
from z_tmp_admin_system_settings
, bukanfrom name
- kolom untuk mengelompokkan disebut
category
, bukansubdomain
- karena prinsip kueri adalah menggunakan agregasi, Anda memerlukan fungsi agregat untuk kolom yang dihasilkan, seperti
MAX()
; versi lama MySQL mentolerir tidak menggunakan fungsi agregat pada kolom non-agregat, tapi itu bukan sesuatu yang biasa - merupakan praktik yang baik untuk mengapit nama kolom dengan backtick, jika salah satu nama bentrok dengan kata yang dicadangkan (ini tidak terjadi pada data sampel Anda, tetapi mungkin tidak komprehensif)
DISTINCT
mungkin tidak diperlukan, kecuali Anda telah menduplikasiname
s per kategori (dalam hal ini, silakan tambahkan kembali ke kode di bawah ini)- Catatan tambahan:
IFNULL(..., NULL)
adalah larangan
Kode:
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 `', name, '`')
)
INTO @sql
FROM 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;
| category | 2fa | abc_processing_date | activate_new_approve_person | activate_new_schdule | additional_footer_for_person |
| -------- | --- | ------------------- | --------------------------- | -------------------- | ---------------------------- |
| acme | 0 | today | 1 | 1 | |