IN क्लॉज में मानों के क्रम के अनुसार परिणाम सॉर्ट करना
MySQL में IN (val1, val2, ...) परिणामों के क्रम की गारंटी नहीं देता। निर्दिष्ट क्रम में सॉर्ट करने के लिए FIND_IN_SET() फ़ंक्शन का उपयोग करें।
सिंटैक्स
SELECT * FROM yourTable WHERE yourColumn IN (val1, val2, val3) ORDER BY FIND_IN_SET(yourColumn, 'val1,val2,val3');
उदाहरण
CREATE TABLE recordSetOrderDemo (
EmployeeId INT,
EmployeeName VARCHAR(30)
);
INSERT INTO recordSetOrderDemo VALUES
(20, 'John'), (10, 'Larry'), (100, 'Mike'), (50, 'Sam'), (10, 'David');
क्वेरी: क्रम 100, 10, 20, 50
SELECT * FROM recordSetOrderDemo WHERE EmployeeId IN (100, 10, 20, 50) ORDER BY FIND_IN_SET(EmployeeId, '100,10,20,50');
आउटपुट
+------------+--------------+ | EmployeeId | EmployeeName | +------------+--------------+ | 100 | Mike | | 10 | Larry | | 10 | David | | 20 | John | | 50 | Sam | +------------+--------------+
कैसे काम करता है
FIND_IN_SET(str, strlist)कॉमा-अलग स्ट्रिंग लिस्ट मेंstrकी 1-आधारित स्थिति लौटाता है।- नहीं मिलने पर
0लौटाता है (पहले आते हैं)। - दूसरा आर्गुमेंट **कॉन्स्टेंट स्ट्रिंग** होना चाहिए (कॉलम नहीं)।
सीमाएं और विकल्प
FIND_IN_SETस्ट्रिंग तुलना करता है; संख्याओं के लिए काम करता है क्योंकि वे स्ट्रिंग में बदल जाते हैं।
<बड़े लिस्ट के लिए प्रदर्शन खराब हो सकता है।
- MySQL 8.0+ विकल्प:
ORDER BY FIELD(EmployeeId, 100, 10, 20, 50)—FIELD()फ़ंक्शन यही काम करता है और अधिक पठनीय है।
FIELD() उदाहरण
ORDER BY FIELD(EmployeeId, 100, 10, 20, 50)