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

การค้นหาในรายการคั่นคอมมา (Comma-separated) ใน MySQL ด้วย FIND_IN_SET

การใช้ FIND_IN_SET() แทน REGEXP สำหรับ CSV Data

เมื่อคอลัมน์เก็บค่าหลายค่าคั่นด้วยคอมมา (CSV) ใช้ FIND_IN_SET(value, column) แทน REGEXP จะเร็วกว่าและแม่นยำกว่า

ไวยากรณ์

FIND_IN_SET(search_value, csv_column)
-- คืนค่า Position (1-based) หากเจอ, 0 หากไม่เจอ

ตัวอย่าง

CREATE TABLE demo17 (
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    first_name VARCHAR(50),
    value TEXT
);

INSERT INTO demo17 (first_name, value) VALUES
('John', '50'), ('David', ''), ('Adam', '50,89'), ('Adam', '49,89,43');

-- ค้นหาแถวที่มี '50' ใน value
SELECT * FROM demo17 WHERE FIND_IN_SET('50', value);

ผลลัพธ์

idfirst_namevalue
1John50
3Adam50,89

ข้อดีของ FIND_IN_SET:

  • จัดการ CSV ได้ถูกต้อง (ไม่ match '50' ใน '150')
  • เร็วกว่า REGEXP
  • Syntax เรียบง่าย

ข้อจำกัด: ไม่ใช้ Index ได้ ควร Normalize ข้อมูลเป็นตารางแยก (Many-to-Many) สำหรับ Production