Tôi có một bảng các bài đăng có tiêu đề theo thứ tự chữ cái "con người" chứ không phải theo thứ tự bảng chữ cái của máy tính. Đây là hai hương vị, số và chữ cái:ORDERBY thứ tự chữ cái "con người" bằng cách sử dụng thao tác chuỗi SQL
bằng số: Hình 1.9, Hình 1.10, hình 1.11 ...
thứ tự chữ cái: Hình 1A ... Hình 1Z .. . Hình 1AA
Nếu tôi orderby
tiêu đề, kết quả là 1,10-1,19 đến giữa 1.1 và 1.2, và 1AA-1AZ đến giữa 1A và 1B. Nhưng đây không phải là điều tôi muốn; Tôi muốn thứ tự chữ cái "con người", trong đó 1,10 xuất hiện sau 1,9 và 1AA xuất hiện sau 1Z.
Tôi tự hỏi nếu vẫn còn một cách trong SQL để có được thứ tự mà tôi muốn sử dụng thao tác chuỗi (hoặc cái gì khác mà tôi đã không nghĩ đến).
Tôi không phải là một chuyên gia trong SQL, vì vậy tôi không biết nếu điều này là có thể, nhưng nếu có một cách để làm thay thế có điều kiện, sau đó có vẻ như tôi có thể áp đặt trật tự tôi muốn bằng cách làm này:
xóa giai đoạn (có thể được thực hiện với
replace
, phải không?)nếu số nhân vật còn lại là hơn ba ký tự, thêm một
0
(zero) sau ký tự đầu tiên.
Điều này dường như để cho tôi kết quả tôi muốn: 1.9
sẽ trở thành 109
, mà xuất phát trước khi 110
; 1Z
sẽ trở thành 10Z
, xuất hiện trước 1AA
. Nhưng nó có thể được thực hiện trong SQL? Nếu vậy, cú pháp sẽ là gì?
Lưu ý rằng tôi không muốn tự sửa đổi dữ liệu — chỉ để xuất kết quả của truy vấn theo thứ tự được mô tả.
Đây là ngữ cảnh của một cài đặt Wordpress, nhưng tôi nghĩ câu hỏi phù hợp hơn là một câu hỏi SQL bởi vì nhiều thứ khác nhau (chẳng hạn như phân trang) phụ thuộc vào thứ tự xảy ra ở giai đoạn truy vấn MySQL, chứ không phải trong PHP.
Đáng buồn thay, tôi nghĩ rằng đặt cược tốt nhất của bạn sẽ phải thiết lập một bảng tra cứu để '1 => 1,1' và' 10 = 1,10'. – Kermit
Các giá trị bạn đang thực sự làm việc với: "1.1", "Hình 1.1", hoặc "Hình 1.1 Đây là chú thích cho hình"? –
Đó là một ý tưởng tồi nhỉ? Sẽ có sự kết hợp giữa số và alpha để sắp xếp trong một lựa chọn không? Nếu vậy chúng ta có thể giả định rằng 1Z được theo sau bởi 2.0? –