FIND_IN_SET() ফাংশন দিয়ে CSV স্ট্রিং থেকে মান খোঁজা
MySQL-এ FIND_IN_SET(str, csv_list) ফাংশন কমা-সেপারেটেড স্ট্রিং (CSV) থেকে নির্দিষ্ট মান আছে কিনা চেক করে। পজিশন (১-বেসড) রিটার্ন করে, না থাকলে ০।
টেবিল ও ডেটা
mysql> CREATE TABLE DemoTable (Id VARCHAR(255));
mysql> INSERT INTO DemoTable VALUES('10,100,1000'), ('101,120,2'), ('3,4,5');
সব রেকর্ড
+-------------+ | Id | +-------------+ | 10,100,1000 | | 101,120,2 | | 3,4,5 | +-------------+
FIND_IN_SET দিয়ে '2' খুঁজা
mysql> SELECT * FROM DemoTable WHERE FIND_IN_SET('2', Id);
+-----------+ | Id | +-----------+ | 101,120,2 | +-----------+
ব্যাখ্যা
FIND_IN_SET('2', Id)— Id কলামের CSV-এ '2' আছে কিনা চেক করে।- WHERE-এ শুধু ফাংশন কল করলেই কাজ করে (০ ছাড়া যেকোনো সংখ্যা TRUE)।
- দ্বিতীয় আর্গুমেন্টটি অবশ্যই কমা-সেপারেটেড স্ট্রিং হতে হবে (স্পেস থাকলে কাজ নাও করতে পারে)।
সীমাবদ্ধতা
FIND_IN_SETশুধু কমা (,) সেপারেটরের জন্য কাজ করে।- অন্য সেপারেটর (সেমিকোলন, পাইপ) হলে
REPLACE()দিয়ে কমায় কনভার্ট করুন। - বড় ডেটাসেটে পারফরম্যান্স খারাপ (ইনডেক্স ব্যবহার হয় না)। নরমালাইজেশন ( আলাদা টেবিল) ভালো সমাধান।