FIELD() फ़ंक्शन के साथ ORDER BY
MySQL में IN क्लॉज में मानों के **कस्टम क्रम** में परिणाम क्रमबद्ध करने के लिए ORDER BY FIELD() का उपयोग करें।
सिंटैक्स
SELECT * FROM yourTableName
WHERE yourColumnName IN (value1, value2, ..., valueN)
ORDER BY FIELD(yourColumnName, value1, value2, ..., valueN);
व्यावहारिक उदाहरण
1. टेबल बनाएं और डेटा डालें
mysql> CREATE TABLE OrderInDemo (
-> Id INT,
-> Name VARCHAR(100),
-> Age INT
-> );
Query OK, 0 rows affected (1.24 sec)
mysql> INSERT INTO OrderInDemo VALUES(90, 'David', 23);
mysql> INSERT INTO OrderInDemo VALUES(9, 'Sam', 24);
mysql> INSERT INTO OrderInDemo VALUES(10, 'Carol', 19);
mysql> INSERT INTO OrderInDemo VALUES(1, 'John', 26);
mysql> INSERT INTO OrderInDemo VALUES(3, 'Johnson', 25);
mysql> INSERT INTO OrderInDemo VALUES(2, 'Ramit', 20);
2. डेटा देखें (डिफ़ॉल्ट क्रम)
mysql> SELECT * FROM OrderInDemo;
+------+---------+------+
| Id | Name | Age |
+------+---------+------+
| 90 | David | 23 |
| 9 | Sam | 24 |
| 10 | Carol | 19 |
| 1 | John | 26 |
| 3 | Johnson | 25 |
| 2 | Ramit | 20 |
+------+---------+------+
6 rows in set (0.00 sec)
3. कस्टम क्रम में क्वेरी (10, 1, 3)
mysql> SELECT * FROM OrderInDemo OD
-> WHERE OD.Id IN (10, 1, 3)
-> ORDER BY FIELD(OD.Id, 10, 1, 3);
+------+---------+------+
| Id | Name | Age |
+------+---------+------+
| 10 | Carol | 19 |
| 1 | John | 26 |
| 3 | Johnson | 25 |
+------+---------+------+
3 rows in set (0.00 sec)
परिणाम: पंक्तियाँ ठीक उसी क्रम में हैं: 10, फिर 1, फिर 3 - जैसा IN और FIELD में निर्दिष्ट है।
FIELD() कैसे काम करता है
FIELD(str, str1, str2, ...)-strकी स्थिति लौटाता है सूची में (1-आधारित)- नहीं मिलने पर 0 लौटाता है
ORDER BY FIELD(...)इस स्थिति के अनुसार क्रमबद्ध करता है
वैकल्पिक: CASE WHEN
ORDER BY CASE Id
WHEN 10 THEN 1
WHEN 1 THEN 2
WHEN 3 THEN 3
ELSE 4
END
FIELD() अधिक संक्षिप्त और पठनीय है।
उपयोग केस
- विशिष्ट ID क्रम में परिणाम दिखाना
- उपयोगकर्ता-निर्दिष्ट क्रम (ड्रैग-एंड-ड्रॉप सॉर्टिंग)
- प्राथमिकता-आधारित क्रमबद्धता