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

Khớp danh sách phân cách dấu phẩy với một giá trị trong MySQL dùng FIND_IN_SET

Dùng FIND_IN_SET(giatri, cot_chuoi_phan_cach_dau_phay) trả về vị trí (1-based), 0 nếu không tìm thấy. Tạo bảng:

mysql> CREATE TABLE DemoTable (`Values` VARCHAR(50)); Query OK, 0 rows affected (1.15 sec)

Chèn dữ liệu (chuỗi CSV):

mysql> INSERT INTO DemoTable VALUES('23,45,78,56');    Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO DemoTable VALUES('384,476,7456');  Query OK, 1 row affected (0.12 sec)
mysql> INSERT INTO DemoTable VALUES('68,8,88,89');    Query OK, 1 row affected (0.10 sec)
mysql> INSERT INTO DemoTable VALUES('78,80,84');      Query OK, 1 row affected (0.19 sec)

Hiển thị dữ liệu:

mysql> SELECT * FROM DemoTable;

Kết quả:

+--------------+
| Values       |
+--------------+
| 23,45,78,56  |
| 384,476,7456 |
| 68,8,88,89   |
| 78,80,84     |
+--------------+
4 rows in set (0.00 sec)

Tìm hàng chứa giá trị '8' trong danh sách:

mysql> SELECT * FROM DemoTable WHERE FIND_IN_SET('8', `Values`) != 0;

Kết quả (chỉ hàng 3 có '8'):

+------------+
| Values     |
+------------+
| 68,8,88,89 |
+------------+
1 row in set (0.00 sec)

Lưu ý: FIND_IN_SET không dùng index, chậm trên bảng lớn. Thiết kế tốt hơn: bảng riêng cho quan hệ many-to-many.