MySQL FIELD() फंक्शन से कस्टम क्रम (Custom Sort Order) में रिजल्ट सॉर्ट करें
FIELD() फंक्शन एक मान की सूची में दिए गए मान की स्थिति (इंडेक्स, 1-आधारित) लौटाता है। इसका मुख्य उपयोग ORDER BY में कस्टम सॉर्टिंग के लिए है।
सिंटैक्स:
SELECT * FROM yourTableName ORDER BY FIELD(yourColumnName, value1, value2, value3, ...) DESC;
कैसे काम करता है:
FIELD(StudentId, 101, 401, 1001, 1010)लौटाता है:- अगर StudentId=101 → 1
- अगर StudentId=401 → 2
- अगर StudentId=1001 → 3
- अगर StudentId=1010 → 4
- अगर सूची में नहीं → 0
DESC से उच्च इंडेक्स (यानी सूची में बाद के मान) पहले आते हैं।
व्यावहारिक उदाहरण
1. टेबल बनाएं:
mysql> CREATE TABLE OrderByDemo (StudentId INT); Query OK, 0 rows affected (0.71 sec)
2. डेटा डालें:
mysql> INSERT INTO OrderByDemo VALUES(101); mysql> INSERT INTO OrderByDemo VALUES(1010); mysql> INSERT INTO OrderByDemo VALUES(1001); mysql> INSERT INTO OrderByDemo VALUES(401);
3. मूल क्रम:
+-----------+ | StudentId | +-----------+ | 101 | | 1010 | | 1001 | | 401 | +-----------+ 4 rows in set (0.00 sec)
4. कस्टम ऑर्डर में सॉर्ट (DESC):
mysql> SELECT * FROM OrderByDemo
-> ORDER BY FIELD(StudentId, 101, 401, 1001, 1010) DESC;
+-----------+ | StudentId | +-----------+ | 1010 | | 1001 | | 401 | | 101 | +-----------+ 4 rows in set (0.00 sec)
व्यावहारिक उपयोग केस:
स्थिति (Status) कॉलम को तार्किक क्रम में सॉर्ट करें:
SELECT * FROM orders ORDER BY FIELD(status, 'pending', 'processing', 'shipped', 'delivered', 'cancelled');
प्राथमिकता (Priority) क्रम:
SELECT * FROM tasks ORDER BY FIELD(priority, 'critical', 'high', 'medium', 'low');
सूची में न होने वाले मान अंत में:
SELECT * FROM products ORDER BY FIELD(category, 'electronics', 'clothing', 'books') DESC, category;
नोट:
FIELD()केस-इनसेंसिटिव तुलना करता है (डिफ़ॉल्ट कोलेशन के अनुसार)- सूची में न होने वाले मान के लिए 0 लौटाता है — वे
ASCमें पहले,DESCमें अंत में आएंगे - बड़े डेटासेट पर प्रदर्शन: इंडेक्स उपयोग नहीं कर सकता, फाइलसॉर्ट ट्रिगर कर सकता है