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

Sắp xếp truy vấn MySQL theo nhiều ID tùy chỉnh với ORDER BY FIELD()

Để 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.