Khi cần ưu tiên sắp xếp theo một giá trị cụ thể của cột (ví dụ: tên "Mike" lên đầu), sau đó sắp xếp tiếp theo theo ID giảm dần, dùng ORDER BY FIELD(...) DESC, Id DESC.
Ví dụ minh họa
Tạo bảng và chèn dữ liệu:
CREATE TABLE DemoTable (Id INT, Name VARCHAR(20)); INSERT INTO DemoTable VALUES (101, 'Chris'), (201, 'Mike'), (110, 'Adam'), (250, 'John');
Sắp xếp: "Mike" lên đầu, các tên còn lại theo ID giảm dần:
SELECT * FROM DemoTable ORDER BY FIELD(Name, 'Mike') DESC, Id DESC;
Kết quả
| Id | Name |
|---|---|
| 201 | Mike |
| 250 | John |
| 110 | Adam |
| 101 | Chris |
Giải thích
FIELD(Name, 'Mike')trả về: 1 nếu Name='Mike', 0 nếu khác.DESCkhiến 1 (Mike) lên đầu, 0 (còn lại) xuống cuối.- Trong nhóm giá trị 0 (các tên khác), sắp xếp tiếp theo
Id DESC.
Mở rộng: Ưu tiên nhiều giá trị
ORDER BY FIELD(Name, 'Mike', 'John', 'Adam') DESC, Id DESC
Thứ tự ưu tiên: Mike (3) → John (2) → Adam (1) → Chris (0) → rồi Id DESC trong mỗi nhóm.
Ứng dụng thực tế
- Hiển thị sản phẩm "Nổi bật" / "Best seller" lên đầu.
- Sắp xếp trạng thái đơn hàng: Processing → Shipped → Delivered → Cancelled.
- Kết hợp với pagination.