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.