परिचय
जब आपको विशिष्ट IDs के क्रम में रिकॉर्ड प्राप्त करने हों जो प्राकृतिक क्रम (ASC/DESC) से अलग हो, तो ORDER BY CASE स्टेटमेंट का उपयोग करके कस्टम क्रम परिभाषित किया जा सकता है।
उदाहरण: टेबल बनाना और डेटा डालना
mysql> CREATE TABLE DemoTable1550 (
-> Id INT,
-> Name VARCHAR(20)
-> );
Query OK, 0 rows affected (0.61 sec)
mysql> INSERT INTO DemoTable1550 VALUES(101, 'Chris');
Query OK, 1 row affected (0.10 sec)
mysql> INSERT INTO DemoTable1550 VALUES(110, 'Bob');
Query OK, 1 row affected (0.29 sec)
mysql> INSERT INTO DemoTable1550 VALUES(105, 'Carol');
Query OK, 1 row affected (0.12 sec)
mysql> INSERT INTO DemoTable1550 VALUES(109, 'Mike');
Query OK, 1 row affected (0.17 sec)
सभी रिकॉर्ड देखना
mysql> SELECT * FROM DemoTable1550;
आउटपुट (डिफ़ॉल्ट सम्मिलन क्रम):
+------+-------+
| Id | Name |
+------+-------+
| 101 | Chris |
| 110 | Bob |
| 105 | Carol |
| 109 | Mike |
+------+-------+
4 rows in set (0.00 sec)
कस्टम क्रम में रिकॉर्ड प्राप्त करने की क्वेरी
हम IDs 109, 101, 110 को इसी क्रम में चाहते हैं:
mysql> SELECT * FROM DemoTable1550
-> WHERE Id IN (109, 101, 110)
-> ORDER BY CASE Id
-> WHEN 109 THEN 1001
-> WHEN 101 THEN 1002
-> WHEN 110 THEN 1003
-> END;
परिणाम
+------+-------+
| Id | Name |
+------+-------+
| 109 | Mike |
| 101 | Chris |
| 110 | Bob |
+------+-------+
3 rows in set (0.00 sec)
व्याख्या
WHERE Id IN (109, 101, 110)- केवल ये तीन रिकॉर्ड चुनता हैCASE Id WHEN 109 THEN 1001 ...- प्रत्येक ID को क्रम मान देता हैORDER BY CASE ...- उन क्रम मानों के आधार पर क्रमबद्ध करता है- क्रम मान (1001, 1002, 1003) कोई भी क्रमिक संख्याएं हो सकती हैं
सरल विकल्प: FIELD() फंक्शन
MySQL का FIELD() फंक्शन इसे और सरल बनाता है:
SELECT * FROM DemoTable1550
WHERE Id IN (109, 101, 110)
ORDER BY FIELD(Id, 109, 101, 110);
FIELD(str, str1, str2, ...) सूची में str की स्थिति लौटाता है (1-आधारित), जो कस्टम क्रमबद्धिकरण के लिए बिल्कुल उपयुक्त है।
उपयोग के मामले
- उपयोगकर्ता-निर्दिष्ट क्रम में परिणाम दिखाना
- फीचर्ड/प्राथमिकता आइटम पहले दिखाना
- एप्लिकेशन-स्तर क्रम को डेटाबेस क्वेरी में लागू करना