Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

डायनेमिक कॉलम के साथ MySQL पिवट टेबल क्वेरी कुंजी मान को काटती है

आपके कोड में कई समस्याएं हैं - गुरुत्वाकर्षण को कम करके:

  • आपको 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                    |                              |


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मैसकल - सभी डेटाबेस में एक टेबल खोजें

  2. एसक्यूएल - वर्चर बनाम int . में प्रदर्शन

  3. क्या PHP परिवर्तनीय आकार की कोई सीमा है?

  4. PHP में एकाधिक mysql प्रश्नों को एक साथ कैसे निष्पादित करें?

  5. !=WHERE क्लॉज का उपयोग करते समय काम नहीं करना चुनें (ग्रुप बाय और हैविंग काउंट का उपयोग करके)