MySQL में किसी कॉलम के मानों को कस्टम क्रम में चुनने के लिए (डिफ़ॉल्ट क्रमबद्धता के बजाय), WHERE column IN (val1, val2, ...) के साथ ORDER BY FIELD() का उपयोग करें।
सिंटैक्स
SELECT column FROM table WHERE column IN (val1, val2, val3) ORDER BY FIELD(column, val1, val2, val3);
व्यावहारिक उदाहरण
1. टेबल बनाएं और डेटा डालें
mysql> CREATE TABLE DemoTable727 (Name VARCHAR(100), Score INT);
Query OK, 0 rows affected (0.88 sec)
mysql> INSERT INTO DemoTable727 VALUES
('Chris', 45), ('Robert', 89), ('Carol', 94),
('David', 93), ('Mike', 78), ('Sam', 67);
Query OK, 6 rows affected (0.18 sec)
2. सभी रिकॉर्ड्स देखें
mysql> SELECT * FROM DemoTable727; +--------+-------+ | Name | Score | +--------+-------+ | Chris | 45 | | Robert | 89 | | Carol | 94 | | David | 93 | | Mike | 78 | | Sam | 67 | +--------+-------+ 6 rows in set (0.00 sec)
3. कस्टम क्रम में चुनें (Robert, David, Sam)
mysql> SELECT Score FROM DemoTable727
WHERE Name IN ('Robert', 'David', 'Sam')
ORDER BY FIELD(Name, 'Robert', 'David', 'Sam');
+-------+
| Score |
+-------+
| 89 | -- Robert
| 93 | -- David
| 67 | -- Sam
+-------+
3 rows in set (0.00 sec)
FIELD() फ़ंक्शन व्याख्या
FIELD(str, str1, str2, str3, ...)
-- str की स्थिति लौटाता है str1, str2, str3... सूची में (1-आधारित)
-- नहीं मिलने पर 0 लौटाता है
SELECT FIELD('David', 'Robert', 'David', 'Sam'); -- 2 लौटाता है
ORDER BY FIELD के बिना (डिफ़ॉल्ट क्रम)
mysql> SELECT Score FROM DemoTable727 WHERE Name IN ('Robert', 'David', 'Sam');
+-------+
| Score |
+-------+
| 67 | -- Sam (वर्णमाला क्रम)
| 89 | -- Robert
| 93 | -- David
+-------+
उन्नत: कस्टम क्रम के साथ सभी कॉलम्स
SELECT * FROM DemoTable727
WHERE Name IN ('Robert', 'David', 'Sam')
ORDER BY FIELD(Name, 'Robert', 'David', 'Sam');
CASE WHEN विकल्प (अधिक लचीला)
SELECT * FROM DemoTable727
WHERE Name IN ('Robert', 'David', 'Sam')
ORDER BY CASE Name
WHEN 'Robert' THEN 1
WHEN 'David' THEN 2
WHEN 'Sam' THEN 3
ELSE 4
END;
उपयोग के मामले
- रिपोर्ट में विशिष्ट क्रम में श्रेणियाँ दिखाना
- प्राथमिकता-आधारित क्रमबद्धता (High, Medium, Low)
- स्थिति क्रम: Pending, Processing, Shipped, Delivered
- किसी अन्य टेबल/सूची से क्रम प्राप्त करना
सबक्वेरी से क्रम प्राप्त करें
SELECT * FROM products WHERE category IN (SELECT name FROM categories ORDER BY priority) ORDER BY FIELD(category, (SELECT GROUP_CONCAT(name ORDER BY priority) FROM categories));