FIELD() फ़ंक्शन से कस्टम सॉर्ट क्रम परिभाषित करें
मानक ASC/DESC के बजाय विशिष्ट मानों के कस्टम क्रम में पंक्तियों को सॉर्ट करने के लिए ORDER BY FIELD() का उपयोग करें।
टेबल और डेटा
mysql> CREATE TABLE DemoTable (StudentId INT);
mysql> INSERT INTO DemoTable VALUES(100), (110), (90), (70), (120), (140);
मूल डेटा
mysql> SELECT * FROM DemoTable;
+-----------+
| StudentId |
+-----------+
| 100 |
| 110 |
| 90 |
| 70 |
| 120 |
| 140 |
+-----------+
कस्टम सॉर्ट क्वेरी
mysql> SELECT * FROM DemoTable
-> ORDER BY FIELD(StudentId, '100', '70', '140', '90', '120', '110');
+-----------+
| StudentId |
+-----------+
| 100 |
| 70 |
| 140 |
| 90 |
| 120 |
| 110 |
+-----------+
FIELD() सिंटैक्स
FIELD(str, val1, val2, val3, ...)
- प्रत्येक मान की स्थिति लौटाता है (1-आधारित)
- मान न मिलने पर 0 लौटाता है (पहले आते हैं)
- स्ट्रिंग तुलना के लिए मान कोट्स में दें
व्यावहारिक उदाहरण
-- प्राथमिकता के अनुसार ऑर्डर सॉर्ट
ORDER BY FIELD(priority, 'urgent', 'high', 'medium', 'low')
-- विशिष्ट स्थिति क्रम
ORDER BY FIELD(status, 'pending', 'processing', 'shipped', 'delivered', 'cancelled')
-- निर्दिष्ट मानों के बाद बाकी
ORDER BY FIELD(category, 'A', 'B', 'C'), category
CASE विकल्प (अधिक लचीला)
ORDER BY CASE
WHEN StudentId = 100 THEN 1
WHEN StudentId = 70 THEN 2
WHEN StudentId = 140 THEN 3
ELSE 4
END
प्रदर्शन नोट
FIELD() इंडेक्स का उपयोग नहीं कर सकता। बड़े डेटासेट के लिए लुकअप टेबल जॉइन या CASE पर विचार करें।