Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MySQL

MySQL में एक फ़ील्ड द्वारा ऑर्डर करें और बाकी रिकॉर्ड्स को उसी क्रम में प्रदर्शित करें

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;

व्यावहारिक उपयोग मामले

  1. विशिष्ट उपयोगकर्ता/एडमिन को शीर्ष पर दिखाना
  2. फीचर्ड उत्पादों को पहले सूचीबद्ध करना
  3. महत्वपूर्ण घोषणाओं को शीर्ष पर रखना
  4. डिफ़ॉल्ट/फॉलबैक रिकॉर्ड को अंत में रखना

नोट: मूल क्रम की गारंटी

MySQL स्पष्ट ORDER BY के बिना सम्मिलन क्रम की गारंटी नहीं देता। यदि मूल क्रम महत्वपूर्ण है, तो एक टाइमस्टैम्प या ऑटो-इन्क्रीमेंट कॉलम जोड़ें और द्वितीयक सॉर्ट के रूप में उपयोग करें:

ORDER BY (Id = 101) DESC, CreatedAt ASC
  1. - MySQL में कॉलम मानों को अलग टेक्स्ट के साथ जोड़ें और एकल कॉलम में प्रदर्शित करें

    आइए पहले एक टेबल बनाते हैं: mysql> create table DemoTable -> ( -> Id int, -> Name varchar(20) -> ); Query OK, 0 rows affected (0.93 sec) इन्सर्ट कमांड का उपयोग करके टेबल में कुछ रिकॉर्ड डालें: mysql> insert into DemoTable values(101,Chris); Query OK, 1 row affected (0.25 sec) mysq

  1. - MySQL क्वेरी दिनांक रिकॉर्ड को सप्ताह के दिन के साथ घटाएं और रिकॉर्ड के साथ सप्ताह का दिन प्रदर्शित करें

    इसके लिए आप DATE_FORMAT() का उपयोग कर सकते हैं। आइए पहले एक टेबल बनाते हैं: mysql> create table DemoTable1820 ( AdmissionDate varchar(20) ); Query OK, 0 rows affected (0.00 sec) इन्सर्ट कमांड का उपयोग करके टेबल में कुछ रिकॉर्ड डालें: mysql> insert into DemoTable1820 values(20/10/2019); Qu

  1. - MySQL में ORDER BY ASC के साथ NULL मानों को नीचे कैसे दिखाएं?

    MySQL में ORDER BY ASC डिफ़ॉल्ट रूप से NULL मानों को पहले रखता है। NULL मानों को अंत में (नीचे) रखते हुए आरोही क्रम बनाए रखने के लिए, CASE स्टेटमेंट या IS NULL चेक के साथ कस्टम सॉर्टिंग लागू करें। उदाहरण: NULL और खाली स्ट्रिंग को नीचे रखें डेमो टेबल बनाएं: mysql> CREATE TABLE DemoTable1937 (Na