Hàm FIND_IN_SET(str, str_list) trả về vị trí của str trong danh sách phân cách bằng dấu phẩy. Dùng nó trong ORDER BY để sắp xếp theo thứ tự tùy ý hoàn toàn.
Ví dụ minh họa
Tạo bảng:
mysql> CREATE TABLE DemoTable (Number INT);
Chèn dữ liệu:
mysql> INSERT INTO DemoTable VALUES(20), (60), (40), (800);
Xem dữ liệu:
mysql> SELECT * FROM DemoTable;
Kết quả
+--------+ | Number | +--------+ | 20 | | 60 | | 40 | | 800 | +--------+
Sắp xếp theo thứ tự: 40, 20, 800, 60:
mysql> SELECT * FROM DemoTable ORDER BY FIND_IN_SET(Number, '40,20,800,60');
Kết quả
+--------+ | Number | +--------+ | 40 | | 20 | | 800 | | 60 | +--------+
Lưu ý: Giá trị không có trong danh sách trả về 0, sẽ được xếp đầu (nếu ASC). Để đẩy xuống cuối: ORDER BY CASE WHEN FIND_IN_SET(Number, '...')=0 THEN 1 ELSE 0 END, FIND_IN_SET(Number, '...'). Cách này chỉ phù hợp tập giá trị nhỏ, không dùng cho dữ liệu lớn.