ORDER BY IF() से कस्टम ऑर्डरिंग
MySQL में डेटा को अपनी पसंद के खास क्रम में व्यवस्थित करने के लिए ORDER BY IF() का उपयोग करें। सिंटैक्स:
SELECT * FROM yourTableName ORDER BY IF(yourColumnName=yourValue1 OR yourColumnName=yourValue2 OR yourColumnName=yourValue3, yourColumnName, ~yourColumnName) ASC;
व्यावहारिक उदाहरण
टेबल बनाएं:
mysql> CREATE TABLE arrangeDataInSpecificOrder (
-> StudentId INT,
-> StudentName VARCHAR(20)
-> );
डेटा इन्सर्ट करें:
mysql> INSERT INTO arrangeDataInSpecificOrder VALUES(10,'Larry'); mysql> INSERT INTO arrangeDataInSpecificOrder VALUES(15,'Mike'); mysql> INSERT INTO arrangeDataInSpecificOrder VALUES(100,'Sam'); mysql> INSERT INTO arrangeDataInSpecificOrder VALUES(70,'Carol'); mysql> INSERT INTO arrangeDataInSpecificOrder VALUES(90,'Bob'); mysql> INSERT INTO arrangeDataInSpecificOrder VALUES(300,'David');
सामान्य क्रम में डेटा:
+-----------+-------------+ | StudentId | StudentName | +-----------+-------------+ | 10 | Larry | | 15 | Mike | | 100 | Sam | | 70 | Carol | | 90 | Bob | | 300 | David | +-----------+-------------+
खास क्रम में व्यवस्थित करने की क्वेरी
मान लें हम चाहते हैं कि StudentId 300, 100, 10 पहले आएं, फिर बाकी:
mysql> SELECT * FROM arrangeDataInSpecificOrder ORDER BY IF(StudentId=300 OR StudentId=100 OR StudentId=10, StudentId, ~StudentId) ASC;
परिणाम:
+-----------+-------------+ | StudentId | StudentName | +-----------+-------------+ | 10 | Larry | | 100 | Sam | | 300 | David | | 90 | Bob | | 70 | Carol | | 15 | Mike | +-----------+-------------+
व्याख्या: IF() फंक्शन जांचता है कि StudentId निर्दिष्ट मानों (300, 100, 10) में से एक है या नहीं। यदि हां, तो वास्तविक मान उपयोग होता है, अन्यथा ~StudentId (बिटवाइज NOT) से नेगेटिव मान मिलता है, जिससे वे बाद में आते हैं।