MySQL-এ কমা-সেপারেটেড স্ট্রিং কলামে নির্দিষ্ট মান আছে কিনা চেক করতে FIND_IN_SET() ফাংশন ব্যবহার করা সবচেয়ে উপযুক্ত।
উদাহরণ
টেবিল তৈরি:
CREATE TABLE demo81 (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(200)
);
INSERT INTO demo81(username) VALUES
('John,Chris,David'), ('Mike,Sam'), ('Chris,Bob,Sam'), ('Mike,John,Chris');
টেবিলের ডেটা:
+----+------------------+ | id | username | +----+------------------+ | 1 | John,Chris,David | | 2 | Mike,Sam | | 3 | Chris,Bob,Sam | | 4 | Mike,John,Chris | +----+------------------+
কোয়েরি
'Chris' মান থাকা রোগুলো সিলেক্ট:
SELECT * FROM demo81 WHERE FIND_IN_SET('Chris', username) > 0;
আউটপুট
+----+------------------+ | id | username | +----+------------------+ | 1 | John,Chris,David | | 3 | Chris,Bob,Sam | | 4 | Mike,John,Chris | +----+------------------+
ব্যাখ্যা:
FIND_IN_SET('Chris', username)- username স্ট্রিংয়ে 'Chris' খুঁজে পозиশন রিটার্ন করে (১, ২, ৩...), না পেলে ০।> 0মানে পাওয়া গেছে।- রো ১: 'Chris' ২য় পজিশনে, রো ৩: ১ম পজিশনে, রো ৪: ৩য় পজিশনে।
- রো ২: 'Chris' নেই -> ০ -> বাদ পড়েছে।
সুবিধা: LIKE '%Chris%'-এর চেয়ে সঠিক (পার্শিয়াল ম্যাচ এড়ায়, যেমন 'Christian' ম্যাচ করবে না)। REGEXP '[[:<:]]Chris[[:>:]]' (ওয়ার্ড বাউন্ডারি) দিয়েও করা যায়।