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

Sắp xếp tùy chỉnh (custom ordering) trong MySQL với ORDER BY CASE / FIELD

Giới thiệu

Khi cần sắp xếp theo thứ tự nghiệp vụ cụ thể (không phải alphabet/number), MySQL cung cấp ORDER BY CASE ... hoặc hàm FIELD().

Ví dụ thực hành

1. Tạo bảng DemoTable808

mysql> CREATE TABLE DemoTable808 (Value VARCHAR(100));

2. Chèn dữ liệu

mysql> INSERT INTO DemoTable808 VALUES ('smith'),('Adamsmith'),('Carolsmith'),('smithJohn');

3. Sắp xếp: chuỗi bắt đầu bằng 'smith' lên đầu, rồi sắp xếp A-Z

mysql> SELECT * FROM DemoTable808 
    ORDER BY CASE WHEN Value LIKE 'smith%' THEN 0 ELSE 1 END ASC, Value ASC;

4. Kết quả

+------------+
| Value      |
+------------+
| smith      |
| smithJohn  |
| Adamsmith  |
| Carolsmith |
+------------+

Cách thay thế: dùng FIELD()

Nếu muốn sắp xếp theo danh sách giá trị cố định:

SELECT * FROM DemoTable808 
ORDER BY FIELD(Value, 'smith', 'smithJohn', 'Adamsmith', 'Carolsmith');

Giá trị không có trong danh sách sẽ được xếp cuối (giá trị NULL của FIELD = 0, nhưng ORDER BY ASC đặt 0 trước → cần FIELD(...) DESC hoặc COALESCE(FIELD(...), 999)).

So sánh

Phương phápƯu điểmNhược điểm
CASE WHENLinh hoạt, điều kiện phức tạpDài, chậm hơn chút
FIELD()Ngắn, nhanh cho danh sách cố địnhChỉ khớp giá trị chính xác

Mẹo: Sắp xếp NULL lên cuối

ORDER BY (col IS NULL), col;  -- NULL cuối
ORDER BY (col IS NOT NULL) DESC, col;  -- NULL đầu