Để 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áchFIELD(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.