MySQL में FIND_IN_SET() का उपयोग करके IN() क्लॉज के क्रम को बनाए रखना
MySQL में IN() क्लॉज परिणामों को कॉलम के अनुसार सॉर्ट कर देता है। मूल क्रम बनाए रखने के लिए ORDER BY FIND_IN_SET() का उपयोग करें।
उदाहरण
टेबल बनाएं:
mysql> create table ProductStock (
-> ProductId int,
-> ProductName varchar(20),
-> ProductQuantity int,
-> ProductPrice float
-> );
डेटा डालें:
mysql> insert into ProductStock values(1, 'Product-101', 10, 500.56); mysql> insert into ProductStock values(25, 'Product-111', 5, 150.00); mysql> insert into ProductStock values(67, 'Product-311', 7, 1000.50); mysql> insert into ProductStock values(55, 'Product-561', 8, 900.00); mysql> insert into ProductStock values(75, 'Product-221', 15, 670.56);
विशिष्ट क्रम में चुनें (25, 55, 67, 75, 1):
mysql> select * from ProductStock
-> where ProductId IN (25, 55, 67, 75, 1)
-> order by find_in_set(ProductId, '25,55,67,75,1');
परिणाम (निर्दिष्ट क्रम में):
+-----------+-------------+-----------------+--------------+ | ProductId | ProductName | ProductQuantity | ProductPrice | +-----------+-------------+-----------------+--------------+ | 25 | Product-111 | 5 | 150 | | 55 | Product-561 | 8 | 900 | | 67 | Product-311 | 7 | 1000.5 | | 75 | Product-221 | 15 | 670.56 | | 1 | Product-101 | 10 | 500.56 | +-----------+-------------+-----------------+--------------+
बिना ORDER BY (डिफ़ॉल्ट सॉर्टेड)
+-----------+-------------+-----------------+--------------+ | ProductId | ProductName | ProductQuantity | ProductPrice | +-----------+-------------+-----------------+--------------+ | 1 | Product-101 | 10 | 500.56 | | 25 | Product-111 | 5 | 150 | | 55 | Product-561 | 8 | 900 | | 67 | Product-311 | 7 | 1000.5 | | 75 | Product-221 | 15 | 670.56 | +-----------+-------------+-----------------+--------------+
MySQL 8.0+ में FIELD() फ़ंक्शन
ORDER BY FIELD(ProductId, 25, 55, 67, 75, 1)
FIELD() FIND_IN_SET() से तेज़ है और स्ट्रिंग पार्सिंग नहीं करता।
नोट
FIND_IN_SET()स्ट्रिंग में कॉमा से अलग मान खोजता है- मानों में कॉमा नहीं होना चाहिए
- बड़े IN सूचियों के लिए अस्थायी टेबल या CTE बेहतर हो सकता है