ORDER BY CASE WHEN LIKE: Sắp xếp theo mẫu chuỗi ưu tiên
Dùng CASE WHEN cot LIKE '%mau%' THEN soThuTu ELSE soKhac END trong ORDER BY để ưu tiên hàng khớp mẫu.
Cú pháp
SELECT * FROM tenBang
ORDER BY CASE
WHEN cot LIKE '%mau1%' THEN 1
WHEN cot LIKE '%mau2%' THEN 2
ELSE 3
END;
Ví dụ: Ưu tiên tên chứa 'Taylor', rồi 'Miller', rồi các cái khác
Bảng OrderByLikeDemo:
CREATE TABLE OrderByLikeDemo (Id INT, Name VARCHAR(100));
INSERT INTO OrderByLikeDemo VALUES
(100,'John Smith'), (101,'Carol Taylor'), (102,'David Miller'),
(103,'Mike Taylor'), (104,'Bob Miller'), (105,'Sam Williams');
Truy vấn:
SELECT * FROM OrderByLikeDemo
ORDER BY CASE
WHEN Name LIKE '%Taylor%' THEN 1
WHEN Name LIKE '%Miller%' THEN 2
ELSE 3
END;
Kết quả
+------+--------------+
| Id | Name |
+------+--------------+
| 101 | Carol Taylor |
| 103 | Mike Taylor |
| 102 | David Miller |
| 104 | Bob Miller |
| 100 | John Smith |
| 105 | Sam Williams |
+------+--------------+
Mở rộng: Sắp xếp thứ 2 trong cùng nhóm
Thêm cột sắp xếp phụ:
ORDER BY
CASE WHEN Name LIKE '%Taylor%' THEN 1
WHEN Name LIKE '%Miller%' THEN 2
ELSE 3 END,
Name; -- A-Z trong cùng nhóm
So sánh với FIELD()
FIELD(): Chỉ khớp giá trị chính xác (equality).CASE WHEN LIKE: Khớp mẫu (pattern), linh hoạt hơn.
Hiệu năng
- Không dùng index cho LIKE '%...%'.
- Với bảng lớn, cân nhắc Full-Text Search hoặc cột flag tính trước (generated column).