MySQL-এ কমা দিয়ে আলাদা করা সংখ্যাগুলোর মধ্যে কোনো নির্দিষ্ট সংখ্যা আছে কিনা চেক করতে FIND_IN_SET() ফাংশন ব্যবহার করা হয়।
টেবিল তৈরি এবং ডেটা ইনসার্ট
mysql> CREATE TABLE DemoTable (
-> CustomerId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> CustomerName VARCHAR(20),
-> CustomerAllProductPrice TEXT
-> );
mysql> INSERT INTO DemoTable(CustomerName, CustomerAllProductPrice)
-> VALUES('Chris', '245,345,678,90,45,56,78');
mysql> INSERT INTO DemoTable(CustomerName, CustomerAllProductPrice)
-> VALUES('Chris', '98,99,90,56,77');
mysql> INSERT INTO DemoTable(CustomerName, CustomerAllProductPrice)
-> VALUES('David', '1000,2000,4000,56000');
সব রেকর্ড দেখুন
mysql> SELECT * FROM DemoTable;
+------------+--------------+-------------------------+
| CustomerId | CustomerName | CustomerAllProductPrice |
+------------+--------------+-------------------------+
| 1 | Chris | 245,345,678,90,45,56,78 |
| 2 | Chris | 98,99,90,56,77 |
| 3 | David | 1000,2000,4000,56000 |
+------------+--------------+-------------------------+
৪০০০ সংখ্যাটি থাকা রো খুঁজে বের করা
mysql> SELECT * FROM DemoTable
-> WHERE FIND_IN_SET('4000', CustomerAllProductPrice);
ফলাফল
+------------+--------------+-------------------------+
| CustomerId | CustomerName | CustomerAllProductPrice |
+------------+--------------+-------------------------+
| 3 | David | 1000,2000,4000,56000 |
+------------+--------------+-------------------------+
ব্যাখ্যা: FIND_IN_SET(str, strlist) ফাংশনটি strlist স্ট্রিংয়ের মধ্যে str আছে কিনা চেক করে। পাওয়া গেলে পজিশন (১-ভিত্তিক) রিটার্ন করে, নাও পেলে ০ রিটার্ন করে। WHERE ক্লজে ০ ফালস মনে হয়, তাই শুধু ম্যাচ করা রো গুলো ফেরত পাওয়া যায়।
সতর্কতা: এই পদ্ধতি বড় ডেটাসেটে ধীর হতে পারে। নরমালাইজড ডিজাইন ( আলাদা টেবিল) ভালো প্র্যাক্টিস।