आपके कोड में कई समस्याएं हैं - गुरुत्वाकर्षण को कम करके:
- आपको
from z_tmp_admin_system_settings
select को चुनना होगा , नहींfrom name
- के अनुसार समूह में कॉलम को
category
कहा जाता है , नहींsubdomain
- चूंकि क्वेरी का सिद्धांत एकत्रीकरण का उपयोग करना है, इसलिए आपको जेनरेट किए गए कॉलम के लिए एक समग्र फ़ंक्शन की आवश्यकता होती है, जैसे कि
MAX()
; MySQL के पुराने संस्करण गैर-एकत्रित स्तंभों पर एक समग्र फ़ंक्शन का उपयोग नहीं करने को सहन करते हैं, लेकिन यह आदी होने के लिए कुछ नहीं है - कॉलम के नाम को बैकटिक्स से घेरना एक अच्छा अभ्यास है, यदि कोई नाम आरक्षित शब्द से टकराता है (यह आपके नमूना डेटा में ऐसा नहीं है, लेकिन यह शायद व्यापक नहीं है)
DISTINCT
शायद इसकी जरूरत नहीं है, जब तक कि आपनेname
. को डुप्लीकेट न किया हो प्रति श्रेणी (इस मामले में, इसे नीचे दिए गए कोड में वापस जोड़ने के लिए स्वतंत्र महसूस करें)- साइड नोट:
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 `', 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 | |