Câu trả lời có trong câu hỏi:
Từ khóa ở đây là "biểu thức" . Bạn có thể sử dụng các biểu thức trong ORDER BY
mệnh đề.
ORDER BY -order_line_groups.sequence DESC
là một biểu thức số học và "dấu gạch ngang" không phải là dấu gạch nối mà là dấu trừ; toán tử toán học một ngôi trừ đi.
Nó hoạt động như thế nào?
Về kết quả, nó hoạt động như mong đợi:
-
Nếu loại cột
order_line_groups.sequence
là kiểu số hoặc loại ngày và giờ (chúng cũng được lưu trữ bên trong dưới dạng số) sau đó dấu trừ đảo ngược thứ tự của các hàng được trả về. Mệnh đề tương đương vớiORDER BY order_line_groups.sequence ASC
-
Nếu loại cột là loại chuỗi thì MySQL cố gắng chuyển đổi các giá trị của cột thành số (vì phép trừ là một phép toán số học và nó không được xác định cho chuỗi). Khi MySQL chuyển đổi chuỗi thành số, nó dừng ở ký tự đầu tiên không phải là chữ số. Tùy thuộc vào dữ liệu bạn lưu trữ trong cột
order_line_groups.sequence
, nhiều hoặc ít giá trị chuỗi của nó sẽ chuyển đổi thành số0
.
Về tốc độ, như đã giải thích trong trang tài liệu được cung cấp trong câu hỏi MySQL không thể sử dụng chỉ mục để giải quyết ORDER BY
. Điều này làm cho truy vấn chậm.
Kết luận
Sử dụng ORDER BY -order_line_groups.sequence
làm cho truy vấn chậm. Hơn nữa, nó không cung cấp một cách tốt để sắp xếp tập hợp kết quả khi loại cột sequence
là một loại chuỗi.