কম্পিউটার টিউটোরিয়াল

MySQL-এ FIND_IN_SET() ব্যবহার করে ASC/DESC ছাড়া কাস্টম ORDER BY করা

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() আরও দ্রুত এবং পঠনযোগ্য।

  1. MySQL-এ INET_ATON() ব্যবহার করে IP ঠিকানা হিউম্যান-রিডেবল ফরম্যাটে সর্ট করুন

  2. MySQL-এ ORDER BY এক্সপ্রেশন ব্যবহার করে ভ্যালু ১০-এর চেয়ে বড় গুলো ASC, ছোট গুলো DESC সর্ট করুন

  3. MySQL-এ ORDER BY ASC করার সময় NULL মানগুলো শেষে রাখা (CASE WHEN)

  4. MySQL-এ ORDER BY CASE ব্যবহার করে কাস্টম ক্রমে রেকর্ড সাজানো