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

Sắp xếp theo LIKE trong MySQL (ORDER BY CASE WHEN LIKE)

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).