MySQL में किसी कॉलम के मानों को मनमाने/कस्टम क्रम में क्रमबद्ध करने के लिए (वर्णमाला या संख्यात्मक नहीं), ORDER BY FIELD() फ़ंक्शन का उपयोग करें।
सिंटैक्स
SELECT * FROM table_name ORDER BY FIELD(column_name, 'value1', 'value2', 'value3', ...);
व्यावहारिक उदाहरण
1. टेबल बनाएं और डेटा डालें
mysql> CREATE TABLE DemoTable (Title VARCHAR(100));
Query OK, 0 rows affected (0.56 sec)
mysql> INSERT INTO DemoTable VALUES ('Java'), ('C'), ('Python'), ('MongoDB');
Query OK, 4 rows affected (0.20 sec)
2. डिफ़ॉल्ट वर्णमाला क्रम
mysql> SELECT * FROM DemoTable ORDER BY Title; +---------+ | Title | +---------+ | C | | Java | | MongoDB | | Python | +---------+ 4 rows in set (0.00 sec)
3. कस्टम क्रम: MongoDB, C, Python, Java
mysql> SELECT * FROM DemoTable ORDER BY FIELD(Title, 'MongoDB', 'C', 'Python', 'Java') ASC; +---------+ | Title | +---------+ | MongoDB | | C | | Python | | Java | +---------+ 4 rows in set (0.00 sec)
FIELD() फ़ंक्शन व्याख्या
FIELD(str, str1, str2, str3, ...)
-- str की स्थिति लौटाता है (1-आधारित)
-- नहीं मिलने पर 0 लौटाता है
SELECT FIELD('Python', 'MongoDB', 'C', 'Python', 'Java'); -- 3 लौटाता है
कस्टम क्रम में नहीं मिलने वाले मान
FIELD() सूची में नहीं मिलने वाले मान 0 प्राप्त करते हैं और पहले आते हैं (ASC क्रम में)। उन्हें अंत में रखने के लिए:
ORDER BY
CASE WHEN FIELD(Title, 'MongoDB', 'C', 'Python', 'Java') = 0 THEN 1 ELSE 0 END,
FIELD(Title, 'MongoDB', 'C', 'Python', 'Java');
उपयोग के मामले
- स्थिति क्रम: Pending, Processing, Shipped, Delivered, Cancelled
- प्राथमिकता: Critical, High, Medium, Low
- श्रेणी क्रम: उपयोगकर्ता-परिभाषित क्रम
- रिपोर्ट क्रम: विशिष्ट व्यावसायिक तर्क
स्थिति क्रम उदाहरण
SELECT * FROM orders ORDER BY FIELD(status, 'Pending', 'Processing', 'Shipped', 'Delivered', 'Cancelled');
सबक्वेरी से क्रम प्राप्त करें
SELECT * FROM products ORDER BY FIELD(category, (SELECT GROUP_CONCAT(name ORDER BY priority) FROM categories));
प्रदर्शन नोट
FIELD()इंडेक्स उपयोग को रोकता है- छोटे-मध्यम टेबल्स के लिए ठीक
- बड़े टेबल्स के लिए: क्रम कॉलम जोड़ें (priority INT) और उस पर इंडेक्स बनाएं
CASE WHEN विकल्प
ORDER BY CASE Title
WHEN 'MongoDB' THEN 1
WHEN 'C' THEN 2
WHEN 'Python' THEN 3
WHEN 'Java' THEN 4
ELSE 5
END;
CASE WHEN अधिक लचीला है (रेंज, शर्तें संभव) लेकिन FIELD() अधिक संक्षिप्त है।