ORDER BY FIELD(): Sắp xếp theo thứ tự tự định nghĩa trong IN
Mặc định IN (1,96,101...) không bảo đảm thứ tự kết quả. Dùng FIELD(cot, val1, val2...) trong ORDER BY để ép thứ tự chính xác theo danh sách.
Cú pháp
SELECT * FROM tenBang
WHERE cot IN (val1, val2, val3...)
ORDER BY FIELD(cot, val1, val2, val3...);
Ví dụ minh họa
Bảng SelectInDemo có StudentId: 1,10,11,15,20,101,96.
Muốn sắp xếp theo thứ tự: 1, 96, 101, 10, 15, 11, 20:
SELECT * FROM SelectInDemo
WHERE StudentId IN (1,96,101,10,15,11,20)
ORDER BY FIELD(StudentId, 1,96,101,10,15,11,20);
Kết quả
+-----------+-------------+------------+
| StudentId | StudentName | StudentAge |
+-----------+-------------+------------+
| 1 | Mike | 23 |
| 96 | Justin | 23 |
| 101 | David | 27 |
| 10 | Bob | 21 |
| 15 | Sam | 24 |
| 11 | Carol | 30 |
| 20 | John | 26 |
+-----------+-------------+------------+
Thứ tự khác: 1,10,11,15,20,101,96
ORDER BY FIELD(StudentId, 1,10,11,15,20,101,96)
Kết quả sẽ theo đúng thứ tự này.
Lưu ý
FIELD()trả về vị trí (1-based) của giá trị trong danh sách, 0 nếu không tìm thấy.- Giá trị không có trong danh sách FIELD() sẽ có giá trị 0 → xuất hiện đầu tiên nếu ASC, cuối nếu DESC. Nên đảm bảo danh sách FIELD() bao phủ tất cả giá trị IN.
- Hàm này chỉ có trong MySQL (không chuẩn SQL).
Ứng dụng
- Hiển thị danh mục theo thứ tự ưu tiên do marketing định.
- Sắp xếp status: 'pending', 'processing', 'shipped', 'delivered', 'cancelled'.
- Custom sort cho báo cáo, dashboard.