ใช้ฟังก์ชัน FIND_IN_SET() ร่วมกับ REPLACE() เพื่อค้นหาค่าในสตริงที่คั่นด้วยตัวคั่นเฉพาะ (เช่น |)
ตัวอย่างการใช้งาน
1. สร้างตารางเก็บค่าคั่นด้วย |
mysql> create table DemoTable (ListOfValues text);
mysql> insert into DemoTable values('10|20|30|40|50|60|100');
2. แปลงตัวคั่น | เป็น , แล้วค้นหา
mysql> select FIND_IN_SET(100, replace(ListOfValues, '|', ',')) from DemoTable;
ผลลัพธ์
+-------------------------------------------------+ | FIND_IN_SET(100, replace(ListOfValues, '|', ',')) | +-------------------------------------------------+ | 7 | +-------------------------------------------------+
คำอธิบาย: ค่า 100 อยู่ตำแหน่งที่ 7 ในรายการ
ข้อจำกัดและทางเลือก
FIND_IN_SETทำงานกับค่าคั่น จุลภาค (,) เท่านั้น -> ต้อง REPLACE ก่อน- ไม่สามารถใช้ Index ได้ -> ช้าเมื่อข้อมูลเยอะ
- แนะนำ: จัดโครงสร้างใหม่เป็นตารางความสัมพันธ์ (Normalization) แทนการเก็บค่าหลายค่าในคอลัมน์เดียว
- MySQL 8.0+ ใช้
JSON_CONTAINSกับคอลัมน์ JSON ได้
ตัวอย่างปรับปรุงโครงสร้าง (แนะนำ)
CREATE TABLE items (
id INT PRIMARY KEY AUTO_INCREMENT,
list_id INT,
value INT,
INDEX(list_id)
);