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

Sắp xếp tùy chỉnh (Custom Sort Order) trong MySQL với ORDER BY FIELD()

Mặc định MySQL sắp xếp theo thứ tự alphabet hoặc số. Khi cần sắp xếp theo thứ tự nghiệp vụ cụ thể (ví dụ: thứ cấp bậc: Thực tập → Fresher → Junior → Senior → Lead), hàm FIELD() trong mệnh đề ORDER BY là giải pháp lý tưởng.

Cú pháp

SELECT * FROM ten_bang
ORDER BY FIELD(cot_can_sap_xep, 'gia_tri_1', 'gia_tri_2', 'gia_tri_3', ...);

Giá trị nào không nằm trong danh sách sẽ được sắp xếp lên đầu (trả về 0).

Ví dụ minh họa

Tạo bảng chức danh:

CREATE TABLE DemoTable (Designation VARCHAR(100));
INSERT INTO DemoTable VALUES 
('Software Engineer'),
('Associate Software Engineer'),
('Software Development Engineer'),
('Product Manager');

Sắp xếp theo thứ cấp bậc mong muốn:

SELECT * FROM DemoTable
ORDER BY FIELD(Designation,
    'Associate Software Engineer',
    'Software Engineer',
    'Software Development Engineer',
    'Product Manager'
);

Kết quả

Designation
Associate Software Engineer
Software Engineer
Software Development Engineer
Product Manager

Mẹo nâng cao

  • Kết hợp với DESC để đảo ngược: ORDER BY FIELD(...) DESC
  • Dùng cho cột số: ORDER BY FIELD(status, 3, 1, 2) (3 lên đầu, rồi 1, rồi 2)
  • Kết hợp sắp xếp phụ: ORDER BY FIELD(type, 'A','B'), name ASC

Lưu ý: FIELD() trả về vị trí (1-based) của giá trị trong danh sách. Giá trị không có trong danh sách trả về 0 → xuất hiện đầu tiên khi sắp xếp ASC.