MySQL में कस्टम ENUM क्रमबद्धता
MySQL ENUM कॉलम अपने आंतरिक क्रम (परिभाषा क्रम) के अनुसार क्रमबद्ध होते हैं, वर्णानुक्रमिक नहीं। कस्टम क्रमबद्धता के लिए, ORDER BY CASE स्टेटमेंट का उपयोग करके प्रत्येक ENUM मान को क्रमबद्धता प्राथमिकता मान पर मैप करें।
उदाहरण: कार्ड क्रमबद्धता (A, K, Q, J क्रम)
mysql> CREATE TABLE DemoTable1461 (
-> DeckOfCards ENUM('K','J','A','Q')
-> );
Query OK, 0 rows affected (0.64 sec)
mysql> INSERT INTO DemoTable1461 VALUES ('K'), ('A'), ('J'), ('Q');
Query OK, 4 rows affected (0.17 sec)
mysql> SELECT * FROM DemoTable1461;
+-------------+
| DeckOfCards |
+-------------+
| K |
| A |
| J |
| Q |
+-------------+
4 rows in set (0.00 sec)
कस्टम क्रम के साथ ORDER BY CASE
mysql> SELECT * FROM DemoTable1461
-> ORDER BY CASE DeckOfCards
-> WHEN 'A' THEN 100
-> WHEN 'K' THEN 101
-> WHEN 'Q' THEN 102
-> ELSE 103
-> END;
परिणाम: कस्टम क्रम A, K, Q, J
+-------------+ | DeckOfCards | +-------------+ | A | | K | | Q | | J | +-------------+ 4 rows in set (0.00 sec)
डिफ़ॉल्ट ENUM क्रम बनाम कस्टम
| क्रम प्रकार | क्रम | कारण |
|---|---|---|
| डिफ़ॉल्ट (परिभाषा) | K, J, A, Q | ENUM परिभाषा क्रम: 'K','J','A','Q' |
| वर्णानुक्रमिक | A, J, K, Q | स्ट्रिंग तुलना |
| कस्टम (CASE) | A, K, Q, J | उपयोगकर्ता-परिभाषित प्राथमिकता |
सरल विकल्प: FIELD() फ़ंक्शन
SELECT * FROM DemoTable1461 ORDER BY FIELD(DeckOfCards, 'A', 'K', 'Q', 'J');
FIELD(str, val1, val2, ...) मान की स्थिति (1-आधारित) लौटाता है, कस्टम क्रमबद्धता के लिए आदर्श।
प्रदर्शन नोट
- CASE/FIELD इंडेक्स उपयोग को रोकता है (फ़ंक्शन-आधारित क्रमबद्धता)
- छोटी टेबल/ENUM के लिए स्वीकार्य
- बड़े डेटासेट के लिए: क्रमबद्धता कॉलम जोड़ें या कवरिंग इंडेक्स का उपयोग करें
अवरोही क्रम
ORDER BY CASE DeckOfCards
WHEN 'J' THEN 1 WHEN 'Q' THEN 2 WHEN 'K' THEN 3 WHEN 'A' THEN 4 END DESC;