MySQL-এ WHERE id IN (...)` ক্লজে রেজাল্টের ক্রম নির্দিষ্ট করতে FIND_IN_SET() ফাংশন ORDER BY` קלজে ব্যবহার করা হয়।
সিনট্যাক্স
SELECT * FROM yourTableName WHERE yourColumnName IN (val1, val2, val3, ...) ORDER BY FIND_IN_SET(yourColumnName, 'val1,val2,val3,...');
উদাহরণ
টেবিল তৈরি:
mysql> CREATE TABLE FindInSetDemo (
-> Id INT, Name VARCHAR(20), Age INT
-> );
ডেটা ইনসার্ট (আউট অফ অর্ডার):
mysql> INSERT INTO FindInSetDemo VALUES(10,'John',23), (1,'Carol',21), (4,'Bob',25), (6,'Sam',26), (7,'Maxwell',29), (8,'Mike',22), (2,'David',27), (3,'James',20);
সকল রেকর্ড:
mysql> SELECT * FROM FindInSetDemo;
+------+---------+------+ | Id | Name | Age | +------+---------+------+ | 10 | John | 23 | | 1 | Carol | 21 | | 4 | Bob | 25 | | 6 | Sam | 26 | | 7 | Maxwell | 29 | | 8 | Mike | 22 | | 2 | David | 27 | | 3 | James | 20 | +------+---------+------+
নির্দিষ্ট ক্রম (1, 4, 6, 7) অনুযায়ী রেজাল্ট:
mysql> SELECT * FROM FindInSetDemo
-> WHERE Id IN (1,4,6,7)
-> ORDER BY FIND_IN_SET(Id, '1,4,6,7');
+------+---------+------+ | Id | Name | Age | +------+---------+------+ | 1 | Carol | 21 | | 4 | Bob | 25 | | 6 | Sam | 26 | | 7 | Maxwell | 29 | +------+---------+------+
ব্যাখ্যা: FIND_IN_SET(Id, '1,4,6,7') প্রতিটি Id-এর জন্য সেটে তার পজিশন রিটার্ন করে (১→১, ৪→২, ৬→৩, ৭→৪)। ORDER BY সেই পজিশন অনুযায়ী সাজায়। সতর্কতা: `FIND_IN_SET` স্ট্রিং কম্পারিজন করে, ইন্টিজার কলামের জন্য অটোমেটিক কাস্ট হয়। বড় ডেটাসেটে পারফরম্যান্সের জন্য FIELD() ফাংশন ভালো: ORDER BY FIELD(Id, 1,4,6,7)।