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

Truy xuất bản ghi từ một phần của danh sách phân cách bằng dấu phẩy trong MySQL?

Để tìm kiếm bản ghi chứa một giá trị cụ thể trong chuỗi được phân cách bằng dấu phẩy, MySQL cung cấp hàm FIND_IN_SET().

Tạo bảng điểm thi

mysql> CREATE TABLE DemoTable (
    -> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> Name VARCHAR(20),
    -> Marks VARCHAR(200)
    -> );

Chèn dữ liệu (điểm lưu dưới dạng chuỗi CSV)

mysql> INSERT INTO DemoTable(Name, Marks) VALUES('Larry', '98,34,56,89');
mysql> INSERT INTO DemoTable(Name, Marks) VALUES('Chris', '67,87,92,99');
mysql> INSERT INTO DemoTable(Name, Marks) VALUES('Robert', '33,45,69,92');

Xem dữ liệu

mysql> SELECT * FROM DemoTable;
+----+--------+-------------+
| Id | Name   | Marks       |
+----+--------+-------------+
| 1  | Larry  | 98,34,56,89 |
| 2  | Chris  | 67,87,92,99 |
| 3  | Robert | 33,45,69,92 |
+----+--------+-------------+

Tìm sinh viên có điểm 99

mysql> SELECT Id, Name FROM DemoTable WHERE FIND_IN_SET('99', Marks) > 0;
+----+-------+
| Id | Name  |
+----+-------+
| 2  | Chris |
+----+-------+

Giải thích FIND_IN_SET()

  • FIND_IN_SET(str, strlist) trả về vị trí (1-based) của str trong chuỗi strlist phân cách 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ỳ tham số nào là NULL
  • Lưu ý: Chỉ hoạt động chính xác khi không có khoảng trắng sau dấu phẩy (ví dụ: '1,2,3' chứ không phải '1, 2, 3')

Cảnh báo về thiết kế database

Lưu trữ nhiều giá trị trong một cột (danh sách phân cách bởi dấu phẩy) vi phạm chuẩn hóa database (1NF). Cân nhắc tạo bảng riêng cho điểm thi với quan hệ 1-nhiều để truy vấn hiệu quả và toàn vẹn dữ liệu tốt hơn.