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

Tìm hàng chứa số cụ thể trong cột lưu chuỗi số phân tách bằng dấu phẩy (FIND_IN_SET)

Khi một cột lưu trữ danh sách số cách nhau bằng dấu phẩy (ví dụ: '245,345,678,90'), hàm FIND_IN_SET() của MySQL là công cụ phù hợp để kiểm tra xem một số cụ thể có nằm trong danh sách đó hay không.

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

mysql> CREATE TABLE DemoTable (
    CustomerId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    CustomerName VARCHAR(20),
    CustomerAllProductPrice TEXT
);

mysql> INSERT INTO DemoTable (CustomerName, CustomerAllProductPrice) VALUES
('Chris', '245,345,678,90,45,56,78'),
('Chris', '98,99,90,56,77'),
('David', '1000,2000,4000,56000');

Xem dữ liệu

mysql> SELECT * FROM DemoTable;
+------------+--------------+-------------------------+
| CustomerId | CustomerName | CustomerAllProductPrice |
+------------+--------------+-------------------------+
|          1 | Chris        | 245,345,678,90,45,56,78 |
|          2 | Chris        | 98,99,90,56,77          |
|          3 | David        | 1000,2000,4000,56000    |
+------------+--------------+-------------------------+

Tìm hàng chứa số 4000

mysql> SELECT * FROM DemoTable 
WHERE FIND_IN_SET('4000', CustomerAllProductPrice);

Kết quả

+------------+--------------+-------------------------+
| CustomerId | CustomerName | CustomerAllProductPrice |
+------------+--------------+-------------------------+
|          3 | David        | 1000,2000,4000,56000    |
+------------+--------------+-------------------------+

Giải thích FIND_IN_SET(str, strlist)

  • Trả về vị trí (1-based index) của str trong chuỗi strlist (danh sách cách nhau bằng dấu phẩy).
  • Trả về 0 nếu không tìm thấy hoặc strlist là chuỗi rỗng.
  • Trả về NULL nếu bất kỳ đối số nào là NULL.
  • Không dùng được nếu strlist chứa dấu phẩy bên trong giá trị (ví dụ: '1,000,2,000').

Lưu ý hiệu năng

FIND_IN_SET không sử dụng index, phải quét toàn bảng (full table scan). Với dữ liệu lớn, nên chuẩn hóa dữ liệu: tách thành bảng liên kết (many-to-many) hoặc dùng kiểu JSON (MySQL 5.7+) với JSON_CONTAINS.