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

MySQL ORDER BY FIELD dùng CASE Statement

Mục đích

Sắp xếp kết quả theo thứ tự tùy chỉnh không theo alphabet hay numeric, dùng CASE trong mệnh đề ORDER BY.

Ví dụ

Tạo bảng và dữ liệu:

CREATE TABLE DemoTable (StudentId VARCHAR(100));
INSERT INTO DemoTable VALUES
('STU-980'), ('STU-1029'), ('STU-189'), ('STU-890');

Thứ tự mong muốn: STU-890, STU-1029, STU-980, STU-189

Truy vấn:

SELECT * FROM DemoTable
ORDER BY CASE
    WHEN StudentId = 'STU-890'  THEN 1
    WHEN StudentId = 'STU-1029' THEN 2
    WHEN StudentId = 'STU-980'  THEN 3
    WHEN StudentId = 'STU-189'  THEN 4
    ELSE 5
END;

Kết quả:

+-----------+
| StudentId |
+-----------+
| STU-890   |
| STU-1029  |
| STU-980   |
| STU-189   |
+-----------+

Cách viết gọn hơn với FIELD()

MySQL có hàm FIELD() chuyên dụng cho trường hợp này:

SELECT * FROM DemoTable
ORDER BY FIELD(StudentId, 'STU-890', 'STU-1029', 'STU-980', 'STU-189');

So sánh

Phương phápƯu điểmNhược điểm
CASE WHENLinh hoạt, xử lý điều kiện phức tạpVerbose, dễ sai khi nhiều giá trị
FIELD()Ngắn gọn, tối ưu cho danh sách giá trị cố địnhChỉ dùng cho so sánh bằng đơn giản
JOIN với bảng mappingDễ maintain, tách config khỏi queryCần bảng phụ, phức tạp hơn

Lưu ý

  • Luôn thêm ELSE trong CASE để xử lý giá trị không nằm trong danh sách.
  • Có thể kết hợp với cột khác: ORDER BY CASE..., created_at DESC.