Để sắp xếp kết quả theo thứ tự tùy chỉnh của các ID cụ thể (không phải alphabet hay numeric), MySQL cung cấp hàm FIELD() trong mệnh đề ORDER BY.
Ví dụ minh họa
Tạo bảng khách hàng:
mysql> create table DemoTable(
ClientId varchar(40),
ClientName varchar(40)
);
Chèn dữ liệu:
mysql> insert into DemoTable values('987_John','John');
mysql> insert into DemoTable values('1000_Sam','Sam');
mysql> insert into DemoTable values('777_Carol','Carol');
mysql> insert into DemoTable values('2000_Bob','Bob');
Hiển thị dữ liệu gốc (thứ tự insert):
mysql> select * from DemoTable;
Kết quả:
+-----------+------------+ | ClientId | ClientName | +-----------+------------+ | 987_John | John | | 1000_Sam | Sam | | 777_Carol | Carol | | 2000_Bob | Bob | +-----------+------------+
Truy vấn sắp xếp theo thứ tự ID tùy chỉnh
mysql> select * from DemoTable order by field(ClientId,'1000_Sam','2000_Bob','777_Carol','987_John');
Kết quả:
+-----------+------------+ | ClientId | ClientName | +-----------+------------+ | 1000_Sam | Sam | | 2000_Bob | Bob | | 777_Carol | Carol | | 987_John | John | +-----------+------------+
Giải thích:
FIELD(ClientId, 'val1', 'val2', ...)trả về vị trí (1-based) của ClientId trong danh sách- Giá trị không có trong danh sách trả về 0 → sẽ được sắp xếp đầu tiên (nếu ASC)
- Danh sách trong FIELD() chính là thứ tự mong muốn
Ứng dụng: Sắp xếp danh mục theo thứ tự ưu tiên business, hiển thị sản phẩm nổi bật lên đầu, custom sorting cho dashboard, v.v.