MySQL-এ IN() ক্লজ ব্যবহার করলে রেজাল্ট স্বয়ংক্রিয়ভাবে সর্ট হয়। নির্দিষ্ট ক্রম রক্ষা করতে ORDER BY FIND_IN_SET() ব্যবহার করুন।
উদাহরণ দিয়ে বুঝি
টেবিল তৈরি করুন:
mysql> CREATE TABLE ProductStock (
-> ProductId INT,
-> ProductName VARCHAR(20),
-> ProductQuantity INT,
-> ProductPrice FLOAT
-> );
Query OK, 0 rows affected (0.79 sec)
রেকর্ড ইনসার্ট করুন:
mysql> INSERT INTO ProductStock VALUES(1, 'Product-101', 10, 500.56);
mysql> INSERT INTO ProductStock VALUES(25, 'Product-111', 5, 150.00);
mysql> INSERT INTO ProductStock VALUES(67, 'Product-311', 7, 1000.50);
mysql> INSERT INTO ProductStock VALUES(55, 'Product-561', 8, 900.00);
mysql> INSERT INTO ProductStock VALUES(75, 'Product-221', 15, 670.56);
সকল রেকর্ড:
mysql> SELECT * FROM ProductStock;
+-----------+-------------+-----------------+--------------+
| ProductId | ProductName | ProductQuantity | ProductPrice |
+-----------+-------------+-----------------+--------------+
| 1 | Product-101 | 10 | 500.56 |
| 25 | Product-111 | 5 | 150 |
| 67 | Product-311 | 7 | 1000.5 |
| 55 | Product-561 | 8 | 900 |
| 75 | Product-221 | 15 | 670.56 |
+-----------+-------------+-----------------+--------------+
5 rows in set (0.00 sec)
IN() ক্লজে ক্রম (25,55,67,75,1) অনুযায়ী রেজাল্ট
mysql> SELECT * FROM ProductStock
-> WHERE ProductId IN(25, 55, 67, 75, 1)
-> ORDER BY FIND_IN_SET(ProductId, '25,55,67,75,1');
+-----------+-------------+-----------------+--------------+
| ProductId | ProductName | ProductQuantity | ProductPrice |
+-----------+-------------+-----------------+--------------+
| 25 | Product-111 | 5 | 150 |
| 55 | Product-561 | 8 | 900 |
| 67 | Product-311 | 7 | 1000.5 |
| 75 | Product-221 | 15 | 670.56 |
| 1 | Product-101 | 10 | 500.56 |
+-----------+-------------+-----------------+--------------+
5 rows in set (0.31 sec)
ব্যাখ্যা: নরমাল IN(25,55,67,75,1) দিলে আউটপুট আসত 1, 25, 55, 67, 75 ক্রমে (সর্টেড)। FIND_IN_SET() ব্যবহার করলে IN-এ দেওয়া ক্রমই রক্ষা হয়েছে।
FIND_IN_SET() সিনট্যাক্স
FIND_IN_SET(str, strlist)
- strlist-এ str খুঁজে পজিশন (১-ভিত্তিক) রিটার্ন করে
- নাও পেলে ০ রিটার্ন করে
- কমা-সেপারেটেড স্ট্রিং লিস্টে কাজ করে
সতর্কতা: বড় ডেটাসেটে FIND_IN_SET() স্লো হতে পারে (ইনডেক্স ব্যবহার করে না)। বিকল্প: FIELD() ফাংশন বা ডিরাইভড টেবিল/সিটি-ই.join ব্যবহার করুন।