MySQL-এ IN (...) ক্লজে মানগুলো যেই ক্রমে দেওয়া হয়, সেই ক্রমে রেজাল্ট পেতে FIND_IN_SET() ফাংশন ORDER BY-এ ব্যবহার করুন।
সিনট্যাক্স
SELECT * FROM table_name
WHERE column IN (val1, val2, val3)
ORDER BY FIND_IN_SET(column, 'val1,val2,val3');
উদাহরণ
CREATE TABLE record_set_order_demo (
employee_id INT,
employee_name VARCHAR(30)
);
INSERT INTO record_set_order_demo VALUES
(20, 'John'), (10, 'Larry'), (100, 'Mike'), (50, 'Sam'), (10, 'David');
IN ক্লজে কাঙ্ক্ষিত ক্রম: 100, 10, 20, 50
SELECT * FROM record_set_order_demo
WHERE employee_id IN (100, 10, 20, 50)
ORDER BY FIND_IN_SET(employee_id, '100,10,20,50');
ফলাফল
+-------------+---------------+
| employee_id | employee_name |
+-------------+---------------+
| 100 | Mike |
| 10 | Larry |
| 10 | David |
| 20 | John |
| 50 | Sam |
+-------------+---------------+
FIND_IN_SET() কিভাবে কাজ করে
FIND_IN_SET(str, strlist)—strlist-এstr-এর পজিশন রিটার্ন করে (১-বেসড)- নাও পেলে
0রিটার্ন করে - কমা-সেপারেটেড স্ট্রিং এক্সপেক্ট করে
দ্রষ্টব্য ও সীমাবদ্ধতা
FIND_IN_SETইনডেক্স ব্যবহার করে না — বড় টেবিলে ধীর- মানগুলোতে কমা থাকলে ভুল রেজাল্ট দেবে
- সংখ্যা হিসেবে সর্ট করতে চাইলে
CASTব্যবহার করুন
আধুনিক বিকল্প: CASE WHEN (MySQL 8.0+)
SELECT * FROM record_set_order_demo
WHERE employee_id IN (100, 10, 20, 50)
ORDER BY CASE employee_id
WHEN 100 THEN 1
WHEN 10 THEN 2
WHEN 20 THEN 3
WHEN 50 THEN 4
ELSE 5
END;
FIELD() ফাংশন (সাদা মান için)
ORDER BY FIELD(employee_id, 100, 10, 20, 50)
FIELD() সংখ্যার জন্য দ্রুত এবং পঠনযোগ্য।