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

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


FIELD() ফাংশন দিয়ে কাস্টম সর্টিং অর্ডার

MySQL-এ IN() ক্লজ রো ফিল্টার করে কিন্তু ফলাফল ডিফল্ট অর্ডারে (সাধারণত PRIMARY KEY অনুযায়ী) আসে। ORDER BY FIELD() ব্যবহার করে IN-এ দেওয়া ক্রম অনুযায়ী ফলাফল সাজানো যায়।

টেবিল ও ডেটা

mysql> CREATE TABLE DemoTable (Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, FirstName VARCHAR(100));
mysql> INSERT INTO DemoTable(FirstName) VALUES('Chris'), ('Robert'), ('Mike'), ('Sam'), ('Carol'), ('David');

সব রেকর্ড

+----+-----------+
| Id | FirstName |
+----+-----------+
| 1  | Chris     |
| 2  | Robert    |
| 3  | Mike      |
| 4  | Sam       |
| 5  | Carol     |
| 6  | David     |
+----+-----------+

IN ক্লজ + ORDER BY FIELD

mysql> SELECT FirstName FROM DemoTable WHERE Id IN(4,5,6) ORDER BY FIELD(Id, 4,5,6);
+-----------+
| FirstName |
+-----------+
| Sam       |
| Carol     |
| David     |
+-----------+

ব্যাখ্যা

  • WHERE Id IN(4,5,6) — ID ৪, ৫, ৬ ফিল্টার।
  • ORDER BY FIELD(Id, 4,5,6) — Id=4 কে ১লocation, Id=5 কে ২য়, Id=6 কে ৩য় লোকেশনে সাজায়।
  • FIELD(str, val1, val2, ...) — str যেকোনো val-এ ম্যাচ করলে সেটি ১-বেসড ইনডেক্স রিটার্ন করে, না পেলে ০।

ব্যবহার ক্ষেত্র

  • UI-তে ইউজার-ডিফাইনড সর্ট অর্ডার।
  • প্রিয়রিটি-ভিত্তিক সাজানো (যেমন: STATUS IN('urgent','high','normal') ORDER BY FIELD(status,'urgent','high','normal'))।
  1. একক MySQL কোয়ারিতে একাধিক সারি পাওয়ার পদ্ধতি

  2. MySQL-এ NOW() এবং INTERVAL ব্যবহার করে সময়ের পার্থক্য বের করুন

  3. MySQL-এ GROUP BY ক্লজে সাবকোয়েরি ব্যবহার করে প্রতিটি গ্রুপের প্রথম রো নির্বাচন করুন

  4. MySQL-এ SELECT ক্যোয়ারির ফলাফল অর্ডার করা