ฟังก์ชัน FIND_IN_SET(str, strlist) ใน MySQL ใช้ค้นหา str ในสตริงที่คั่นด้วยคอมม่า strlist คืนค่าตำแหน่ง (1-based) หากพบ หรือ 0 หากไม่พบ
ตัวอย่างการสร้างตาราง
mysql> create table DemoTable (
Id varchar(255) );
Query OK, 0 rows affected (0.51 sec)
เพิ่มข้อมูลรายการคั่นด้วยคอมม่า
mysql> insert into DemoTable values('10,100,1000');
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable values('101,120,2');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('3,4,5');
Query OK, 1 row affected (0.11 sec)
แสดงข้อมูลทั้งหมด
mysql> select * from DemoTable;
+-------------+ | Id | +-------------+ | 10,100,1000 | | 101,120,2 | | 3,4,5 | +-------------+ 3 rows in set (0.00 sec)
คำสั่งค้นหา ID ที่มีค่า '2' อยู่ในรายการ
mysql> select * from DemoTable where find_in_set('2', Id);
ผลลัพธ์
+-----------+ | Id | +-----------+ | 101,120,2 | +-----------+ 1 row in set (0.03 sec)
คำอธิบาย: FIND_IN_SET('2', Id) จะคืนค่า > 0 (TRUE) ก็ต่อเมื่อ '2' อยู่ในรายการคั่นคอมม่าในคอลัมน์ Id
ข้อจำกัด:
- ทำงานได้เฉพาะสตริงที่คั่นด้วย คอมม่า (,) เท่านั้น ไม่รองรับตัวคั่นอื่น
- ไม่สามารถใช้ดัชนี (Index) ได้ อาจช้าสำหรับตารางใหญ่
- แนะนำให้ปรับโครงสร้างเป็นตารางความสัมพันธ์ (Normalization) แทนการเก็บค่าหลายค่าในคอลัมน์เดียว