MySQL-এ ORDER BY ক্লজে ASC বা DESC ব্যবহার না করে কাস্টম ক্রমে সর্ট করতে FIND_IN_SET() ফাংশন ব্যবহার করা যায়।
টেবিল তৈরি এবং ডেটা ইনসার্ট
mysql> CREATE TABLE DemoTable (
-> Number INT
-> );
Query OK, 0 rows affected (2.25 sec)
mysql> INSERT INTO DemoTable VALUES(20), (60), (40), (800);
সব রেকর্ড দেখানো
mysql> SELECT * FROM DemoTable;
আউটপুট
+--------+ | Number | +--------+ | 20 | | 60 | | 40 | | 800 | +--------+ 4 rows in set (0.00 sec)
কাস্টম ক্রমে সর্ট (৪০, ২০, ৮০০, ৬০)
mysql> SELECT * FROM DemoTable ORDER BY FIND_IN_SET(Number, '40,20,800,60');
আউটপুট
+--------+ | Number | +--------+ | 40 | | 20 | | 800 | | 60 | +--------+ 4 rows in set (0.14 sec)
ব্যাখ্যা: FIND_IN_SET(Number, '40,20,800,60') — Number কলামের মান কমা-বহুলক স্ট্রিং-এ কততম পজিশনে আছে তা রিটার্ন করে। ৪০=১, ২০=২, ৮০০=৩, ৬০=৪। লিস্টে নাই মান ০ পাবে (শেষে যাবে)। ORDER BY অরোহী ক্রমে সাজায়, তাই ১, ২, ৩, ৪ ক্রমে আসে।
সতর্কতা: FIND_IN_SET স্ট্রিং ফাংশন, ইনডেক্স ব্যবহার করে না। বড় টেবিলে ধীর।
উন্নত বিকল্প (MySQL 8.0+): ORDER BY FIELD(Number, 40, 20, 800, 60) — FIELD() আরও দ্রুত এবং পঠনযোগ্য।