परिचय
MySQL में FIND_IN_SET() फंक्शन का उपयोग करके परिणाम सेट को विशिष्ट ID क्रम में क्रमबद्ध किया जा सकता है जो प्राकृतिक क्रम से अलग हो।
उदाहरण: टेबल बनाना और डेटा डालना
mysql> CREATE TABLE DemoTable1563 (
-> StudentId INT,
-> StudentName VARCHAR(20)
-> );
Query OK, 0 rows affected (0.52 sec)
mysql> INSERT INTO DemoTable1563 VALUES(1001, 'Chris');
Query OK, 1 row affected (0.11 sec)
mysql> INSERT INTO DemoTable1563 VALUES(1010, 'Bob');
Query OK, 1 row affected (0.15 sec)
mysql> INSERT INTO DemoTable1563 VALUES(1005, 'Chris');
Query OK, 1 row affected (0.20 sec)
mysql> INSERT INTO DemoTable1563 VALUES(1015, 'David');
Query OK, 1 row affected (0.10 sec)
mysql> INSERT INTO DemoTable1563 VALUES(1030, 'Mike');
Query OK, 1 row affected (0.18 sec)
mysql> INSERT INTO DemoTable1563 VALUES(1020, 'Sam');
Query OK, 1 row affected (0.14 sec)
सभी रिकॉर्ड देखना
mysql> SELECT * FROM DemoTable1563;
आउटपुट (सम्मिलन क्रम):
+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
| 1001 | Chris |
| 1010 | Bob |
| 1005 | Chris |
| 1015 | David |
| 1030 | Mike |
| 1020 | Sam |
+-----------+-------------+
6 rows in set (0.00 sec)
निर्दिष्ट क्रम में परिणाम प्राप्त करने की क्वेरी
mysql> SELECT * FROM DemoTable1563
-> WHERE StudentId IN (1001, 1030, 1010, 1020)
-> ORDER BY FIND_IN_SET(StudentId, '1001,1030,1010,1020');
परिणाम
+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
| 1001 | Chris |
| 1030 | Mike |
| 1010 | Bob |
| 1020 | Sam |
+-----------+-------------+
4 rows in set (0.00 sec)
व्याख्या
WHERE StudentId IN (...)- केवल निर्दिष्ट IDs चुनता हैFIND_IN_SET(StudentId, '1001,1030,1010,1020')- सूची में StudentId की स्थिति लौटाता है (1, 2, 3, 4)ORDER BY FIND_IN_SET(...)- उस स्थिति के आधार पर क्रमबद्ध करता है- परिणाम ठीक उसी क्रम में: 1001, 1030, 1010, 1020
तुलना: ORDER BY CASE vs FIND_IN_SET
-- CASE (अधिक वर्बोज, लचीला)
ORDER BY CASE StudentId
WHEN 1001 THEN 1 WHEN 1030 THEN 2 WHEN 1010 THEN 3 WHEN 1020 THEN 4 END
-- FIND_IN_SET (सरल, कॉमा-सूची के लिए)
ORDER BY FIND_IN_SET(StudentId, '1001,1030,1010,1020')
FIELD() फंक्शन (और भी सरल)
ORDER BY FIELD(StudentId, 1001, 1030, 1010, 1020)
FIELD() संख्यात्मक IDs के लिए सबसे अच्छा है, FIND_IN_SET() स्ट्रिंग सूचियों के लिए।