2013-07-02 17 views
9

ja poszukuje jakiegoś dostrojenia w mysql zamawiającego, ja zazwyczaj wybrać rekord z tabeli, a następnie zamówić rekord Name (varchar) ASC ale numer jest zawsze na pierwszym miejscuORDER BY alfabetu pierwszy następnie postępuj według numeru

tutaj jakiś przykład mojego pytania (noty. mysql sortowania rekord z 0-9 pierwszej)

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

Co chcę jest porządek alfabetyczny przyjść najpierw następnie postępuj według numeru

pożądany wynik

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

Starałem się uczynić pytanie proste i schludne, proszę dać mi znać, czy powinienem podać więcej informacji, okrzyki! –

Odpowiedz

16

użyć następujących ORDER BY klauzula:

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

+1 ładna alternatywa – Stephan

+0

'RLIKE' lub LIKE **? ** nie dostał –

+0

Testowany, Jego działał, prosty i łatwy do zrozumienia, Dzięki! –

1

Można spróbować czegoś takiego:

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

Więc jeśli nazwa zaczyna się od cyfry złączyć „ZZ” na początku (tak, że będzie to ostatnia)

+0

Czy to nie spowoduje, że liczby będą przechodzić między 'v' i' w'? – Barmar

+0

@Barmar your right ... chciałem umieścić ostatnią literę alfabetu, ale nie rozwiąże to wszystkich przypadków, jak wtedy, gdy masz nazwisko: "zzabc" – Stephan

+0

Dlatego właśnie moje rozwiązanie jest najlepsze. – Barmar

6

Ref this

SELECT name FROM list ORDER BY name * 1 ASC 

Zmieniano

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

To ignoruje wszystkie litery. – Barmar

+0

@Barmar sprawdź poprawioną odpowiedź – Salil

+1

Nie zadziała, jeśli którakolwiek z nazw zaczyna się od '0'. – Barmar

-1

Spróbuj ..

To prosta, aby uzyskać odpowiedź

SELECT name from list ORDER BY (name +0) ASC ,name ASC