ORDER BY IF() या CASE का उपयोग
MySQL में रिकॉर्ड्स को किसी विशिष्ट कस्टम क्रम में क्रमबद्ध करने के लिए ORDER BY क्लॉज में IF() या CASE एक्सप्रेशन का उपयोग करें।
सिंटैक्स
SELECT * FROM yourTableName ORDER BY IF(yourColumn = 'priorityValue', 1, 0) DESC, yourColumn;
उदाहरण
1. टेबल बनाना
mysql> CREATE TABLE DemoTable (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
FirstName VARCHAR(20),
Branch VARCHAR(20)
);
Query OK, 0 rows affected (1.96 sec)
2. डेटा डालना
mysql> INSERT INTO DemoTable(FirstName, Branch) VALUES('John', 'CS');
mysql> INSERT INTO DemoTable(FirstName, Branch) VALUES('Carol', 'ME');
mysql> INSERT INTO DemoTable(FirstName, Branch) VALUES('David', 'ME');
mysql> INSERT INTO DemoTable(FirstName, Branch) VALUES('Bob', 'CE');
mysql> INSERT INTO DemoTable(FirstName, Branch) VALUES('Robert', 'EE');
mysql> INSERT INTO DemoTable(FirstName, Branch) VALUES('Chris', 'EEE');
mysql> INSERT INTO DemoTable(FirstName, Branch) VALUES('James', 'ME');
3. सभी रिकॉर्ड्स देखना
mysql> SELECT * FROM DemoTable;
+----+-----------+--------+ | Id | FirstName | Branch | +----+-----------+--------+ | 1 | John | CS | | 2 | Carol | ME | | 3 | David | ME | | 4 | Bob | CE | | 5 | Robert | EE | | 6 | Chris | EEE | | 7 | James | ME | +----+-----------+--------+ 7 rows in set (0.00 sec)
4. 'ME' ब्रांच को पहले क्रमबद्ध करना
mysql> SELECT * FROM DemoTable
ORDER BY IF(Branch = 'ME', 1, 0) DESC, Branch;
+----+-----------+--------+ | Id | FirstName | Branch | +----+-----------+--------+ | 2 | Carol | ME | | 3 | David | ME | | 7 | James | ME | | 4 | Bob | CE | | 1 | John | CS | | 5 | Robert | EE | | 6 | Chris | EEE | +----+-----------+--------+ 7 rows in set (0.00 sec)
CASE एक्सप्रेशन का उपयोग (अधिक लचीला)
SELECT * FROM DemoTable
ORDER BY CASE Branch
WHEN 'ME' THEN 1
WHEN 'CS' THEN 2
WHEN 'CE' THEN 3
WHEN 'EE' THEN 4
WHEN 'EEE' THEN 5
ELSE 6
END;
FIELD() फंक्शन का उपयोग (सबसे सरल)
SELECT * FROM DemoTable ORDER BY FIELD(Branch, 'ME', 'CS', 'CE', 'EE', 'EEE');
तुलना
| तरीका | लचीलापन | पठनीयता | प्रदर्शन |
|---|---|---|---|
| IF() | दो समूह (प्राथमिक/गैर-प्राथमिक) | सरल | अच्छा |
| CASE | असीमित कस्टम क्रम | स्पष्ट | अच्छा |
| FIELD() | सूची-आधारित क्रम | बहुत सरल | अच्छा |
व्यावहारिक उदाहरण
ऑर्डर स्टेटस: Pending > Processing > Shipped > Delivered > Cancelled
SELECT * FROM orders ORDER BY FIELD(status, 'Pending', 'Processing', 'Shipped', 'Delivered', 'Cancelled');
प्राथमिकता: High > Medium > Low
SELECT * FROM tasks ORDER BY FIELD(priority, 'High', 'Medium', 'Low'), created_at;
विशिष्ट IDs क्रम में
SELECT * FROM products WHERE id IN (5, 2, 8, 1) ORDER BY FIELD(id, 5, 2, 8, 1);
प्रदर्शन नोट
कस्टम ORDER BY इंडेक्स का उपयोग नहीं कर पाता। बड़े टेबल के लिए:
- सॉर्ट कॉलम जोड़ें (sort_order INT) और उस पर इंडेक्स डालें
- एप्लिकेशन लेवल पर सॉर्ट करें