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

SELECT với thứ tự tùy chỉnh IN() và FIELD() trong MySQL

Để chọn các hàng theo danh sách ID xác định VÀ sắp xếp kết quả đúng thứ tự của danh sách đó, bạn kết hợp IN() (lọc) với ORDER BY FIELD() (sắp xếp).

Ví dụ minh họa

Tạo bảng sinh viên:

mysql> create table DemoTable( 
    StudentId varchar(10), 
    StudentName varchar(20) 
);

Chèn dữ liệu:

mysql> insert into DemoTable values('10001','Adam');
mysql> insert into DemoTable values('1010','Chris');
mysql> insert into DemoTable values('1020','Bob');
mysql> insert into DemoTable values('1030','Carol');
mysql> insert into DemoTable values('1040','Sam');

Hiển thị dữ liệu gốc:

mysql> select * from DemoTable;

Kết quả:

+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
| 10001     | Adam        |
| 1010      | Chris       |
| 1020      | Bob         |
| 1030      | Carol       |
| 1040      | Sam         |
+-----------+-------------+

Truy vấn IN() + ORDER BY FIELD()

mysql> select * from DemoTable 
where StudentId IN('1040','1010','1020','1030','10001') 
order by FIELD(StudentId,'1040','1010','1020','1030','10001');

Kết quả (theo đúng thứ tự liệt kê trong IN/FIELD):

+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
| 1040      | Sam         |
| 1010      | Chris       |
| 1020      | Bob         |
| 1030      | Carol       |
| 10001     | Adam        |
+-----------+-------------+

Giải thích:

  • IN(...): Chỉ lấy các hàng có StudentId trong danh sách
  • FIELD(StudentId, '1040','1010',...): Trả về vị trí (1,2,3,4,5) → sắp xếp theo vị trí này
  • Hai danh sách IN() và FIELD() phải **giống hệt nhau và cùng thứ tự**

Ứng dụng: Hiển thị danh sách theo thứ tự ưu tiên do frontend gửi lên, custom sorting cho report, API trả về dữ liệu theo thứ tự client yêu cầu.