MySQL-এ IN() ক্লজে দেওয়া মানের ক্রম অনুযায়ী ফলাফল সর্ট করতে ORDER BY FIELD(column, val1, val2, ...) ব্যবহার করা হয়।
টেবিল তৈরি এবং ডেটা ইনসার্ট
mysql> CREATE TABLE DemoTable (
-> Number INT
-> );
Query OK, 0 rows affected (0.54 sec)
mysql> INSERT INTO DemoTable VALUES(19), (30), (34), (28), (25), (29), (24);
সব রেকর্ড দেখানো
mysql> SELECT * FROM DemoTable;
আউটপুট
+--------+ | Number | +--------+ | 19 | | 30 | | 34 | | 28 | | 25 | | 29 | | 24 | +--------+ 7 rows in set (0.00 sec)
FIELD() ব্যবহার করে IN লিস্টের ক্রমে সর্ট
mysql> SELECT * FROM DemoTable
-> ORDER BY FIELD(Number, 30, 19, 34, 25, 28, 29, 24);
আউটপুট
+--------+ | Number | +--------+ | 30 | | 19 | | 34 | | 25 | | 28 | | 29 | | 24 | +--------+ 7 rows in set (0.00 sec)
ব্যাখ্যা: FIELD(Number, 30, 19, 34, ...) — Number কলামের মান লিস্টে কততম পজিশনে আছে তা রিটার্ন করে (৩০ = ১, ১৯ = ২, ৩৪ = ৩...। না পেলে ০)। ORDER BY ডিফল্ট অরোহী ক্রমে সাজায়, তাই ১, ২, ৩... ক্রমে আসে। লিস্টে নাই মানগুলো (০) শেষে যাবে।
বিকল্প: ORDER BY CASE Number WHEN 30 THEN 1 WHEN 19 THEN 2 ... ELSE 99 END — FIELD() নাও থাকলে।
সতর্কতা: FIELD() কেস-ইনসেনসিটিভ (ডিফল্ট কলেশন অনুযায়ী)। বড় লিস্টে পারফরম্যান্স বিবেচনা করুন।