MySQL-এ কমা-সেপারেটেড মান থাকা কলামে নির্দিষ্ট সংখ্যা আছে কিনা চেক করতে বিল্ট-ইন FIND_IN_SET() ফাংশন ব্যবহার করা সবচেয়ে সহজ এবং দক্ষ।
সিনট্যাক্স
SELECT * FROM yourTableName WHERE FIND_IN_SET('searchValue', yourColumnName) > 0;
উদাহরণ
টেবিল তৈরি:
CREATE TABLE demo73 (
interest_id VARCHAR(100),
interest_name VARCHAR(100)
);
ডেটা ইনসার্ট:
INSERT INTO demo73 VALUES ('100,101,103,105', 'SSC');
INSERT INTO demo73 VALUES ('105,103,1005,1003,104', 'Computer');
INSERT INTO demo73 VALUES ('110,105,104,111', 'Novel');
টেবিলের ডেটা:
+-----------------------+---------------+ | interest_id | interest_name | +-----------------------+---------------+ | 100,101,103,105 | SSC | | 105,103,1005,1003,104 | Computer | | 110,105,104,111 | Novel | +-----------------------+---------------+
কোয়েরি
সংখ্যা ১০৩ থাকা রোগুলো সিলেক্ট:
SELECT * FROM demo73 WHERE FIND_IN_SET('103', interest_id) > 0;
আউটপুট
+-----------------------+---------------+ | interest_id | interest_name | +-----------------------+---------------+ | 100,101,103,105 | SSC | | 105,103,1005,1003,104 | Computer | +-----------------------+---------------+
ব্যাখ্যা:
FIND_IN_SET(str, strlist)কমা-সেপারেটেড স্ট্রিংstrlist-এstrখুঁজে পозиশন (১-ভিত্তিক) রিটার্ন করে। না পেলে ০।CONCAT/LIKEপ্যাটার্নের চেয়ে এটি দ্রুত এবং সঠিক (পার্শিয়াল ম্যাচ এড়ায়, যেমন ১০৩ vs ১১০৩)।- केवल কমা (,) সেপারেটরের জন্য কাজ করে। অন্যান্য সেপারেটরের জন্য
REGEXPবাLIKEব্যবহার করুন।
নোট: FIND_IN_SET কেস-ইনসেনসিটিভ (ডিফল্ট কলেশন অনুযায়ী)। বড় ডেটাসেটে ইনডেক্স ব্যবহার করে না (ফুল টেবিল স্ক্যান)।