কম্পিউটার টিউটোরিয়াল

MySQL-এ FIND_IN_SET() ব্যবহার করে কমা-বহুলক ফিল্ডে মান খোঁজা

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() ব্যবহার করুন।

  1. MySQL-এ AUTO_INCREMENT কলাম ছাড়া রেকর্ড ইনসার্ট করা

  2. MySQL টেবিলের জন্য 'user' শব্দ ব্যবহার করা যাবে কি?

  3. MySQL-এ SELECT স্টেটমেন্টের মাঝপথে কমা (,) ব্যবহার করা (CROSS JOIN)

  4. MySQL-এ কমা-বिभক্ত স্ট্রিংয়ে নির্দিষ্ট শব্দ খুঁজে বের করা (REGEXP)