Giới thiệu
Để sắp xếp kết quả dựa trên số lượng từ khóa khớp (mỗi LIKE khớp được 1 điểm), dùng tổng các biểu thức boolean (col LIKE '%kw%') trong ORDER BY ... DESC. Trong MySQL, TRUE = 1, FALSE = 0.
Ví dụ: Ưu tiên tên chứa 'Doe' và 'David'
Bước 1: Tạo bảng và dữ liệu
CREATE TABLE demo2 (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100)
);
INSERT INTO demo2 (name) VALUES
('John'), ('David'), ('John Smith'), ('John Doe'), ('David Miller'), ('Chris'), ('Bob Doe');
Bước 2: ORDER BY tổng điểm LIKE
SELECT * FROM demo2
ORDER BY
(name LIKE '%Doe%') +
(name LIKE '%David%') DESC;
Kết quả
+----+--------------+
| id | name |
+----+--------------+
| 2 | David | -- khớp 'David' (1 điểm)
| 4 | John Doe | -- khớp 'Doe' (1 điểm)
| 5 | David Miller | -- khớp 'David' (1 điểm)
| 7 | Bob Doe | -- khớp 'Doe' (1 điểm)
| 1 | John | -- 0 điểm
| 3 | John Smith | -- 0 điểm
| 6 | Chris | -- 0 điểm
+----+--------------+
Lưu ý: Các hàng cùng điểm sẽ giữ thứ tự không xác định (thường theo thứ tự chèn). Thêm cột sắp xếp phụ: ORDER BY (...) DESC, name.