MySQL में विशिष्ट रिकॉर्ड को प्राथमिकता देकर ऑर्डर करना
कभी-कभी आप एक विशिष्ट रिकॉर्ड को शीर्ष पर रखना चाहते हैं जबकि बाकी रिकॉर्ड्स अपने मूल क्रम में रहें। MySQL में बूलियन अभिव्यक्ति (Id = 101) का उपयोग करके ORDER BY में यह प्राप्त किया जा सकता है।
टेबल बनाना
mysql> CREATE TABLE DemoTable (
-> Id INT,
-> Name VARCHAR(20)
-> );
Query OK, 0 rows affected (0.82 sec)
डेटा डालना
mysql> INSERT INTO DemoTable VALUES (201, 'Chris Brown');
Query OK, 1 row affected (0.17 sec)
mysql> INSERT INTO DemoTable VALUES (110, 'John Doe');
Query OK, 1 row affected (0.29 sec)
mysql> INSERT INTO DemoTable VALUES (101, 'Adam Smith');
Query OK, 1 row affected (0.13 sec)
mysql> INSERT INTO DemoTable VALUES (345, 'Carol Taylor');
Query OK, 1 row affected (0.13 sec)
mysql> INSERT INTO DemoTable VALUES (135, 'John Smith');
Query OK, 1 row affected (0.11 sec)
मूल क्रम (सम्मिलन क्रम)
mysql> SELECT * FROM DemoTable;
+------+--------------+
| Id | Name |
+------+--------------+
| 201 | Chris Brown |
| 110 | John Doe |
| 101 | Adam Smith |
| 345 | Carol Taylor |
| 135 | John Smith |
+------+--------------+
5 rows in set (0.00 sec)
Id=101 को शीर्ष पर रखने का क्वेरी
mysql> SELECT * FROM DemoTable
-> ORDER BY (Id = 101) DESC;
परिणाम
+------+--------------+
| Id | Name |
+------+--------------+
| 101 | Adam Smith |
| 201 | Chris Brown |
| 110 | John Doe |
| 345 | Carol Taylor |
| 135 | John Smith |
+------+--------------+
5 rows in set (0.00 sec)
यह कैसे काम करता है
(Id = 101)एक बूलियन अभिव्यक्ति है जो TRUE (1) या FALSE (0) लौटाती हैDESCके साथ, TRUE (1) पहले आता है, फिर FALSE (0)- समान बूलियन मान वाले रिकॉर्ड्स अपना सापेक्ष क्रम बनाए रखते हैं (स्थिर सॉर्ट)
एकाधिक प्राथमिकता मान
-- पहले Id=101, फिर Id=201, फिर बाकी
SELECT * FROM DemoTable
ORDER BY (Id = 101) DESC, (Id = 201) DESC;
FIELD() फ़ंक्शन का उपयोग (अधिक पठनीय)
SELECT * FROM DemoTable
ORDER BY FIELD(Id, 101, 201) DESC, Id;
FIELD() मान की सूची में स्थिति लौटाता है (नहीं मिलने पर 0)।
CASE WHEN का उपयोग (अधिक लचीला)
SELECT * FROM DemoTable
ORDER BY CASE
WHEN Id = 101 THEN 1
WHEN Id = 201 THEN 2
ELSE 3
END, Id;
व्यावहारिक उपयोग मामले
- विशिष्ट उपयोगकर्ता/एडमिन को शीर्ष पर दिखाना
- फीचर्ड उत्पादों को पहले सूचीबद्ध करना
- महत्वपूर्ण घोषणाओं को शीर्ष पर रखना
- डिफ़ॉल्ट/फॉलबैक रिकॉर्ड को अंत में रखना
नोट: मूल क्रम की गारंटी
MySQL स्पष्ट ORDER BY के बिना सम्मिलन क्रम की गारंटी नहीं देता। यदि मूल क्रम महत्वपूर्ण है, तो एक टाइमस्टैम्प या ऑटो-इन्क्रीमेंट कॉलम जोड़ें और द्वितीयक सॉर्ट के रूप में उपयोग करें:
ORDER BY (Id = 101) DESC, CreatedAt ASC