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

MySQL में ORDER BY FIELD() का उपयोग करके मनमाने क्रम में क्रमबद्ध करना

MySQL में किसी कॉलम के मानों को मनमाने/कस्टम क्रम में क्रमबद्ध करने के लिए (वर्णमाला या संख्यात्मक नहीं), ORDER BY FIELD() फ़ंक्शन का उपयोग करें।

सिंटैक्स

SELECT * FROM table_name 
ORDER BY FIELD(column_name, 'value1', 'value2', 'value3', ...);

व्यावहारिक उदाहरण

1. टेबल बनाएं और डेटा डालें

mysql> CREATE TABLE DemoTable (Title VARCHAR(100));
Query OK, 0 rows affected (0.56 sec)

mysql> INSERT INTO DemoTable VALUES ('Java'), ('C'), ('Python'), ('MongoDB');
Query OK, 4 rows affected (0.20 sec)

2. डिफ़ॉल्ट वर्णमाला क्रम

mysql> SELECT * FROM DemoTable ORDER BY Title;
+---------+
| Title   |
+---------+
| C       |
| Java    |
| MongoDB |
| Python  |
+---------+
4 rows in set (0.00 sec)

3. कस्टम क्रम: MongoDB, C, Python, Java

mysql> SELECT * FROM DemoTable 
ORDER BY FIELD(Title, 'MongoDB', 'C', 'Python', 'Java') ASC;
+---------+
| Title   |
+---------+
| MongoDB |
| C       |
| Python  |
| Java    |
+---------+
4 rows in set (0.00 sec)

FIELD() फ़ंक्शन व्याख्या

FIELD(str, str1, str2, str3, ...)
-- str की स्थिति लौटाता है (1-आधारित)
-- नहीं मिलने पर 0 लौटाता है

SELECT FIELD('Python', 'MongoDB', 'C', 'Python', 'Java');  -- 3 लौटाता है

कस्टम क्रम में नहीं मिलने वाले मान

FIELD() सूची में नहीं मिलने वाले मान 0 प्राप्त करते हैं और पहले आते हैं (ASC क्रम में)। उन्हें अंत में रखने के लिए:

ORDER BY 
    CASE WHEN FIELD(Title, 'MongoDB', 'C', 'Python', 'Java') = 0 THEN 1 ELSE 0 END,
    FIELD(Title, 'MongoDB', 'C', 'Python', 'Java');

उपयोग के मामले

  • स्थिति क्रम: Pending, Processing, Shipped, Delivered, Cancelled
  • प्राथमिकता: Critical, High, Medium, Low
  • श्रेणी क्रम: उपयोगकर्ता-परिभाषित क्रम
  • रिपोर्ट क्रम: विशिष्ट व्यावसायिक तर्क

स्थिति क्रम उदाहरण

SELECT * FROM orders 
ORDER BY FIELD(status, 'Pending', 'Processing', 'Shipped', 'Delivered', 'Cancelled');

सबक्वेरी से क्रम प्राप्त करें

SELECT * FROM products 
ORDER BY FIELD(category, (SELECT GROUP_CONCAT(name ORDER BY priority) FROM categories));

प्रदर्शन नोट

  • FIELD() इंडेक्स उपयोग को रोकता है
  • छोटे-मध्यम टेबल्स के लिए ठीक
  • बड़े टेबल्स के लिए: क्रम कॉलम जोड़ें (priority INT) और उस पर इंडेक्स बनाएं

CASE WHEN विकल्प

ORDER BY CASE Title
    WHEN 'MongoDB' THEN 1
    WHEN 'C' THEN 2
    WHEN 'Python' THEN 3
    WHEN 'Java' THEN 4
    ELSE 5
END;

CASE WHEN अधिक लचीला है (रेंज, शर्तें संभव) लेकिन FIELD() अधिक संक्षिप्त है।

  1. - MySQL में अलग-अलग लंबाई के अल्फ़ान्यूमेरिक कॉलम को कैसे सॉर्ट करें

    SUBSTRING_INDEX और संख्यात्मक कास्टिंग के साथ अल्फ़ान्यूमेरिक सॉर्टिंग पहले टेबल बनाएं: create table DemoTable1623 ( StudentCode varchar(20) ); Query OK, 0 rows affected (0.47 sec) रिकॉर्ड डालें: insert into DemoTable1623 values(STU-MIT-148); Query OK, 1 row affected (0.22 sec) सभी रिकॉर्ड देखें:

  1. - MySQL में ORDER BY FIELD और ID से कस्टम सॉर्ट और द्वितीयक सॉर्ट

    MySQL में ORDER BY FIELD() का उपयोग करके एक कॉलम को कस्टम क्रम में सॉर्ट करें, फिर दूसरे कॉलम से द्वितीयक सॉर्ट लागू करें। सिंटैक्स SELECT * FROM टेबल_नाम ORDER BY FIELD(कॉलम1, मान1, मान2, ...) DESC/ASC, कॉलम2 DESC/ASC; उदाहरण: Mike को पहले रखें, फिर ID अवरोही क्रम में 1. टेबल बनाएं );

  1. - MySQL में ORDER BY से विशिष्ट मान को अंत में कैसे सॉर्ट करें?

    ट्रिक: बूलियन अभिव्यक्ति सॉर्टिंग (full_name=Not Known) TRUE=1, FALSE=0 देता है। ASC क्रम में 0 पहले, 1 बाद में आता है। उदाहरण insert into demo57(full_name) values(John Smith), (David Miller), (Not Known), (Chris Brown); क्वेरी select * from demo57 order by (full_name=Not Known), full_name desc