2013-07-02 27 views
9

Tôi tìm kiếm một số tinh chỉnh trong mysql đặt hàng, tôi thường chọn bản ghi từ bảng và sau đó đặt hàng kỷ lục theo Tên (varchar) ASC nhưng số lượng luôn luôn đến trướcORDER BY bảng chữ cái đầu tiên sau đó làm theo bởi số

đây một số ví dụ về câu hỏi của tôi (lưu ý. mysql loại kỷ lục với 0-9 đầu tiên)

SELECT name FROM list ORDER BY name ASC 
record returned: 
1 star 
2 star 
9 slice 
Ape 
Age 
Beg 
Bell 
Fish 
Zoo 

gì tôi muốn là thứ tự bảng chữ cái đến trước sau đó làm theo bởi số

mong muốn đầu ra

Ape 
Age 
Beg 
Bell 
Fish 
Zoo 
1 star 
2 star 
9 slice 
+0

tôi đã cố gắng để làm cho câu hỏi đơn giản và gọn gàng, xin vui lòng cho tôi biết nếu tôi nên cung cấp thêm thông tin, chúc mừng! –

Trả lời

16

Sử dụng những điều sau đây ORDER BY khoản:

ORDER BY IF(name RLIKE '^[a-z]', 1, 2), name 
+4

+1 thay thế tốt đẹp – Stephan

+0

'RLIKE' hoặc LIKE **? ** không nhận được –

+0

Đã thử nghiệm, Công việc của nó, đơn giản và dễ hiểu, Cảm ơn! –

1

Bạn có thể thử một cái gì đó như thế này:

SELECT 
    name 
FROM 
    list 
ORDER BY 
    IF(name REGEXP '^[0-9]', CONCAT('zz',name),name) ASC 

Vì vậy, nếu tên của bạn bắt đầu bằng một chữ số bạn tiếp nhau 'zz' trong đầu (để nó sẽ phải xuống hàng chót)

+0

Sẽ không làm cho con số đi giữa 'v' và' w'? – Barmar

+0

@ Hãy cố gắng ... tôi muốn đặt chữ cái cuối cùng của bảng chữ cái nhưng ngay cả như vậy nó sẽ không giải quyết tất cả các trường hợp như khi bạn có tên: 'zzabc' – Stephan

+0

Đó là lý do tại sao giải pháp của tôi là tốt nhất. – Barmar

6

Ref this

SELECT name FROM list ORDER BY name * 1 ASC 

Sửa

SELECT name FROM list ORDER BY name * 1, name ASC 
+0

Điều đó bỏ qua tất cả các chữ cái. – Barmar

+0

@barmar kiểm tra câu trả lời đã chỉnh sửa của tôi – Salil

+1

Sẽ không hoạt động nếu bất kỳ tên nào bắt đầu bằng '0'. – Barmar

-1

Hãy thử điều này ..

Nó đơn giản một để có được câu trả lời của bạn

SELECT name from list ORDER BY (name +0) ASC ,name ASC 
Các vấn đề liên quan