MySQL-এ একক কলামে কমা-বহুলক (comma-separated) মান থাকলে IN() কাজ করে না। এর বদলে FIND_IN_SET() ফাংশন ব্যবহার করতে হয়।
টেবিল তৈরি এবং ডেটা ইনসার্ট (পাইপ | দিয়ে বিভক্ত)
mysql> CREATE TABLE DemoTable (
-> ListOfValues TEXT
-> );
Query OK, 0 rows affected (0.56 sec)
mysql> INSERT INTO DemoTable VALUES('10|20|30|40|50|60|100');
রেকর্ড দেখানো
mysql> SELECT * FROM DemoTable;
আউটপুট
+-----------------------+ | ListOfValues | +-----------------------+ | 10|20|30|40|50|60|100 | +-----------------------+ 1 row in set (0.00 sec)
FIND_IN_SET() ব্যবহার (পাইপকে কমায় রূপান্তর করে)
mysql> SELECT FIND_IN_SET(100, REPLACE(ListOfValues, '|', ',')) FROM DemoTable;
আউটপুট
+-------------------------------------------------+ | FIND_IN_SET(100, REPLACE(ListOfValues, '|', ',')) | +-------------------------------------------------+ | 7 | +-------------------------------------------------+ 1 row in set (0.04 sec)
ব্যাখ্যা:
REPLACE(ListOfValues, '|', ',')— পাইপ (|) কে কমা (,) তে রূপান্তর করে:'10,20,30,40,50,60,100'।FIND_IN_SET(100, ...)— কমা-বহুলক স্ট্রিং-এ100খুঁজে পজিশন (১-বেসড) রিটার্ন করে। ৭তম পজিশনে পাওয়া গেলো।- না পেলে
0রিটার্ন করে।
সতর্কতা: FIND_IN_SET স্ট্রিং ফাংশন, ইনডেক্স ব্যবহার করে না। বড় ডেটাসেটে ধীর। নরমালাইজড ডিজাইন ( আলাদা টেবিল) ভালো।
JSON বিকল্প (MySQL 5.7+): JSON ডেটা টাইপ এবং JSON_CONTAINS() ব্যবহার করুন।