MySQL-এ IN() ক্লজ ব্যবহার করলে রেজাল্ট স্বয়ংক্রিয়ভাবে সর্ট হয়। IN ক্লজের দেওয়া ক্রম অনুযায়ী রেজাল্ট পেতে FIND_IN_SET() ফাংশন ব্যবহার করতে হয়।
সিনট্যাক্স
SELECT yourAlias.*
FROM yourTableName yourAlias
WHERE yourAlias.yourColumnName IN(value1, value2, ... N)
ORDER BY FIND_IN_SET(yourAlias.yourColumnName, 'value1,value2,...N');
উদাহরণ দিয়ে বুঝি
টেবিল তৈরি করুন:
mysql> CREATE TABLE InDemo (
-> CodeId INT,
-> Name VARCHAR(20)
-> );
Query OK, 0 rows affected (0.95 sec)
রেকর্ড ইনসার্ট করুন:
mysql> INSERT INTO InDemo VALUES(1, 'John');
mysql> INSERT INTO InDemo VALUES(2, 'Carol');
mysql> INSERT INTO InDemo VALUES(3, 'Sam');
mysql> INSERT INTO InDemo VALUES(4, 'Bob');
সর্টিং ছাড়া ডেটা:
mysql> SELECT * FROM InDemo;
+--------+-------+
| CodeId | Name |
+--------+-------+
| 1 | John |
| 2 | Carol |
| 3 | Sam |
| 4 | Bob |
+--------+-------+
4 rows in set (0.00 sec)
IN ক্লজের ক্রম (1,3,2,4) অনুযায়ী সিলেক্ট করুন
mysql> SELECT tbl.*
-> FROM InDemo tbl
-> WHERE tbl.CodeId IN(1,3,2,4)
-> ORDER BY FIND_IN_SET(tbl.CodeId, '1,3,2,4');
+--------+-------+
| CodeId | Name |
+--------+-------+
| 1 | John |
| 3 | Sam |
| 2 | Carol |
| 4 | Bob |
+--------+-------+
4 rows in set (0.00 sec)
ব্যাখ্যা: নরমাল IN() দিলে আউটপুট আসত 1,2,3,4 ক্রমে। কিন্তু FIND_IN_SET() ব্যবহার করলে IN-এ দেওয়া ক্রম (1,3,2,4) অনুযায়ী আউটপুট আসেছে।
সতর্কতা: FIND_IN_SET() স্ট্রিং-ভিত্তিক কাজ করে, বড় ডেটাসেটে পারফরম্যান্স প্রভাবিত হতে পারে।