Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ค้นหา VARCHAR ID ใน MySQL จากรายการค่าที่คั่นด้วยคอมม่า ด้วย FIND_IN_SET

ฟังก์ชัน 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) แทนการเก็บค่าหลายค่าในคอลัมน์เดียว