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

ค้นหาค่าในคอลัมน์ที่มีค่าคั่นด้วยเครื่องหมายจุลภาคใน MySQL

ใช้ฟังก์ชัน 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)
);