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

Truy vấn MySQL: Lấy kết quả khớp ít nhất N trong M điều kiện

Để lấy các hàng khớp với ít nhất một số lượng điều kiện nhất định (ví dụ: 3 trên 4 điều kiện), bạn có thể dùng câu lệnh CASE để tính điểm cho từng điều kiện rồi lọc theo tổng điểm.

Cú pháp chung

SELECT * FROM ten_bang
WHERE 
    (CASE WHEN dieu_kien_1 THEN 1 ELSE 0 END) +
    (CASE WHEN dieu_kien_2 THEN 1 ELSE 0 END) +
    (CASE WHEN dieu_kien_3 THEN 1 ELSE 0 END) +
    (CASE WHEN dieu_kien_4 THEN 1 ELSE 0 END) >= 3;

Ví dụ minh họa: Tìm user khớp ≥ 3/4 tiêu chí

1. Tạo bảng

CREATE TABLE UserInformation (
    Id INT NOT NULL AUTO_INCREMENT,
    FirstName VARCHAR(20),
    LastName VARCHAR(20),
    Age INT,
    Marks INT,
    PRIMARY KEY(Id)
);

2. Chèn dữ liệu

INSERT INTO UserInformation(FirstName, LastName, Age, Marks) VALUES
('John', 'Smith', 22, 89),
('Carol', 'Taylor', 21, 80),
('John', 'Doe', 24, 81),
('David', 'Miller', 29, 99),
('Mitchell', 'Johnson', 22, 65);

3. Truy vấn: Tìm user khớp ít nhất 3 trong 4 điều kiện:
  • FirstName = 'Mitchell'
  • LastName = 'Johnson'
  • Age = 22
  • Marks = 67

SELECT * FROM UserInformation
WHERE 
    (CASE WHEN FirstName = 'Mitchell' THEN 1 ELSE 0 END) +
    (CASE WHEN LastName = 'Johnson' THEN 1 ELSE 0 END) +
    (CASE WHEN Age = 22 THEN 1 ELSE 0 END) +
    (CASE WHEN Marks = 67 THEN 1 ELSE 0 END) >= 3;

Kết quả:

+----+-----------+----------+------+-------+
| Id | FirstName | LastName | Age  | Marks |
+----+-----------+----------+------+-------+
| 5  | Mitchell  | Johnson  | 22   | 65    |
+----+-----------+----------+------+-------+

User Mitchell khớp 3 điều kiện: FirstName, LastName, Age (Marks = 65 ≠ 67).

Cách viết gọn hơn (MySQL cho phép TRUE = 1, FALSE = 0)

SELECT * FROM UserInformation
WHERE 
    (FirstName = 'Mitchell') +
    (LastName = 'Johnson') +
    (Age = 22) +
    (Marks = 67) >= 3;

Trong MySQL, biểu thức logic trả về 1 (TRUE) hoặc 0 (FALSE), có thể cộng trực tiếp.

Ứng dụng thực tế

  • Tìm kiếm mờ (fuzzy search) với ngưỡng khớp
  • Hệ thống gợi ý dựa trên nhiều tiêu chí
  • Phân loại dữ liệu đa điều kiện