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

Sắp xếp ORDER BY tùy chỉnh không dùng ASC/DESC trong MySQL

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.