MySQL में डायनामिक कॉलम नाम के साथ ORDER BY करने के लिए, यूज़र-डिफ़ाइंड वेरिएबल और PREPARED STATEMENT का उपयोग करें। यह तब उपयोगी होता है जब कॉलम का नाम रनटाइम पर तय होता है।
उदाहरण: वेरिएबल के साथ डायनामिक ORDER BY
डेमो टेबल बनाएं:
mysql> CREATE TABLE DemoTable1898 (Number INT);
डेटा इन्सर्ट करें:
mysql> INSERT INTO DemoTable1898 VALUES (10), (70), (30), (50), (40);
डायनामिक ORDER BY के लिए स्टेप्स:
-- 1. वेरिएबल सेट करें (कॉलम पोजीशन: 1 = पहला कॉलम)
mysql> SET @limitValue := 1;
-- 2. डायनामिक क्वेरी बनाएं
mysql> SET @query := CONCAT('SELECT * FROM DemoTable1898 ORDER BY ', @limitValue);
-- 3. प्रिपेयर करें
mysql> PREPARE stmt FROM @query;
-- 4. एक्ज़ीक्यूट करें
mysql> EXECUTE stmt;
-- 5. डीअलोकेट करें
mysql> DEALLOCATE PREPARE stmt;
आउटपुट (पहले कॉलम द्वारा सॉर्टेड):
+--------+ | Number | +--------+ | 10 | | 30 | | 40 | | 50 | | 70 | +--------+
महत्वपूर्ण नोट्स
- कॉलम पोजीशन: MySQL
ORDER BY 1,ORDER BY 2आदि को कॉलम पोजीशन के रूप में सपोर्ट करता है। - SQL इंजेक्शन जोखिम: वेरिएबल मान को वैलिडेट/सैनिटाइज़ करें यदि यह यूज़र इनपुट से आता है।
- स्कोप: यूज़र वेरिएबल (@var) सेशन-स्कोप्ड होते हैं।
- प्रिपेयर्ड स्टेटमेंट: डायनामिक SQL के लिए आवश्यक है।
बेहतर विकल्प: एप्लिकेशन लेयर पर डायनामिक SQL
आधुनिक एप्लिकेशन में, डायनामिक सॉर्टिंग एप्लिकेशन कोड (Java, Python, PHP, आदि) में बनाना अधिक सुरक्षित और रखरखाव योग्य है:
// पसेडोकोड String column = validateColumn(userInput); // व्हाइटलिस्ट वैलिडेशन String sql = "SELECT * FROM table ORDER BY " + column;
डेटाबेस लेयर पर डायनामिक SQL का उपयोग सीमित मामलों (स्टोर्ड प्रोसीजर, एडमिन स्क्रिप्ट) के लिए ही करें।