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

MySQL-এ IN ক্লজের পজিশন অনুযাতে রেজাল্ট সর্ট করা (FIND_IN_SET)

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

  1. MySQL-এ GROUP BY এবং ORDER BY DESC ব্যবহার করে মান গুলোর কাউন্ট দেখানো

  2. MySQL-এ ORDER BY FIELD() দিয়ে IN ক্লজের কৃত্রিম ক্রম অনুযায়ী ফলাফল সাজানো

  3. MySQL-এ SUBSTRING_INDEX() দিয়ে কমা-সেপারেটেড সংখ্যার সেটের প্রথম সংখ্যা দিয়ে ORDER BY করা

  4. MySQL-এ ORDER BY এবং LIMIT OFFSET দিয়ে ২য় সারি বের করা