Chỉ cần đặt một câu hỏi khá giống với câu hỏi này ...MySQL Orderby a number, Empty Strings (hoặc 0's) Cuối cùng
Hiện tại tôi đang làm một OrderBy rất cơ bản trong tuyên bố của mình.
SELECT * FROM tablename WHERE visible=1 ORDER BY position ASC, id DESC
Vấn đề với điều này là các mục chuỗi rỗng cho 'vị trí' được coi là 0. Vì vậy, tất cả các mục có vị trí là chuỗi rỗng xuất hiện trước những người có 1,2,3,4. ví dụ:
'', '', '', 1, 2, 3, 4
hoặc
0, 0, 0, 1, 2, 3, 4
Có một cách để đạt được thứ tự sau:
1, 2, 3, 4, '', '', ''.
hoặc
1, 2, 3, 4, 0, 0, 0.
Tôi giả sử các giải pháp có thể có một số loại thay thế chức năng nhưng tôi đã không thể tìm thấy một chức năng mà làm những gì tôi sau, thông qua google.
Nhiều Cảm ơn,
JonB
Tôi nghĩ điều này sẽ hiệu quả nhưng đó không phải là giải pháp tốt nhất. Tôi nghĩ rằng 'vị trí' phải là một cột số nguyên, và nếu trường hợp đó xảy ra, biểu thức' CASE' cũng nên sử dụng các số nguyên chứ không phải các chuỗi. Nếu 'vị trí' không phải là số nguyên hoặc ít nhất là số, sắp xếp làm số sẽ không hoạt động. Ngoài ra, các giải pháp này thêm một cột mới để sắp xếp, có khả năng sẽ có tác động tiêu cực đến hiệu suất.Nếu giả định rằng 'vị trí' thực sự là một số nguyên là chính xác, thì OP có thể có nghĩa là giá trị' NULL', nơi anh ta viết 'chuỗi rỗng', nghĩa là bạn có thể chỉ cần viết 'ORDER BY COALESCE (vị trí, ~ 0), id DESC' –
@Roland: OP ngụ ý khá rõ ràng rằng vị trí là một chuỗi: * "Vấn đề với điều này là các mục chuỗi rỗng cho 'vị trí' được coi là 0." * – RedFilter
OrbMan có, anh ấy đã làm. Và tôi đang nói rằng đó có lẽ là một phần của vấn đề. Đề xuất của tôi là cung cấp cho nó một loại dữ liệu thích hợp lên phía trước thay vì cố gắng để lau lên sau đó. –