Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Tìm bản ghi cụ thể từ cột giá trị phân cách bằng dấu phẩy trong MySQL

Tìm kiếm trong cột chứa danh sách giá trị phân cách bằng dấu phẩy

Sử dụng hàm FIND_IN_SET() - chuyên dụng cho chuỗi CSV (Comma-Separated Values).

Tạo bảng và dữ liệu

mysql> create table DemoTable ( ListOfValue varchar(20) ); 
Query OK, 0 rows affected (0.52 sec)
mysql> insert into DemoTable values('78,89,65'); 
mysql> insert into DemoTable values('88,96,97'); 
mysql> insert into DemoTable values('95,96,99,100'); 
mysql> insert into DemoTable values('78,45,67,98');

Truy vấn tìm hàng chứa 89 HOẶC 99

mysql> select * from DemoTable 
    -> where find_in_set('89',ListOfValue) 
    -> or find_in_set('99',ListOfValue);

Kết quả

+--------------+ 
| ListOfValue  | 
+--------------+ 
| 78,89,65     | 
| 95,96,99,100 | 
+--------------+

Giải thích FIND_IN_SET(str, csv_col):

  • Trả về vị trí (1-based) của str trong chuỗi csv_col
  • Trả về 0 nếu không tìm thấy
  • Trong WHERE, giá trị > 0 được coi là TRUE

⚠️ Hạn chế:

  • Chỉ hoạt động đúng với chuỗi không chứa khoảng trắng sau dấu phẩy ('1,2,3' OK, '1, 2, 3' KHÔNG OK)
  • Không tận dụng index → chậm trên bảng lớn
  • Thiết kế tốt hơn: Chuẩn hóa dữ liệu (bảng riêng cho mối quan hệ nhiều-nhiều)

Thay thế hiện đại: MySQL 8.0+ hỗ trợ JSON: WHERE JSON_CONTAINS(cot_json, '89').