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

Tìm kiếm trong cột giá trị phân cách bằng dấu phẩy với FIND_IN_SET trong MySQL

Giới thiệu

Hàm FIND_IN_SET(str, strlist) tìm chuỗi str trong danh sách chuỗi phân cách bằng dấu phẩy strlist. Trả về vị trí (bắt đầu từ 1) hoặc 0 nếu không tìm thấy.

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

mysql> create table DemoTable (
    -> Value varchar(20)
    -> ); 
Query OK, 0 rows affected (0.47 sec)

mysql> insert into DemoTable values('41,14,94'); 
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values('64,84,94'); 
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('44,74,103,104'); 
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values('904,1004,1444,1544'); 
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('4,144,174'); 
Query OK, 1 row affected (0.15 sec)

2. Dữ liệu gốc

mysql> select *from DemoTable;
+--------------------+
| Value              |
+--------------------+
| 41,14,94           |
| 64,84,94           |
| 44,74,103,104      |
| 904,1004,1444,1544 |
| 4,144,174          |
+--------------------+
5 rows in set (0.00 sec)

3. Tìm hàng chứa giá trị '4' chính xác

mysql> select *from DemoTable where find_in_set('4', Value);

4. Kết quả

+-----------+
| Value     |
+-----------+
| 4,144,174 |
+-----------+
1 row in set (0.00 sec)

Tại sao không dùng LIKE?

  • LIKE '%4%' sẽ khớp 41, 14, 94, 44, 104, 1444, 1544, 4, 144, 174 → sai
  • FIND_IN_SET so khớp chính xác từng phần tử phân cách bởi dấu phẩy

Lưu ý:

  • Chỉ hoạt động đúng khi danh sách không chứa dấu phẩy trong phần tử
  • Không sử 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 sang bảng riêng (many-to-many)