Mysql
 sql >> Database >  >> RDS >> Mysql

Come ordinare i risultati MySQL prima con le lettere, poi con i simboli?

Questo metterà tutti gli artisti i cui nomi iniziano con una lettera in a-z prima di quelli che non lo fanno:

SELECT DISTINCT artist
FROM songs
ORDER BY artist REGEXP '^[a-z]' DESC, artist

Guardalo funzionare online:sqlfiddle

Ma potresti preferire memorizzare una seconda colonna con il nome semplificato in modo da poterle inserire in un ordine più sensato:

artists

artist            | simplified_name
------------------------------------
&i                | i
+NURSE            | nurse
2007excalibur2007 | excalibur

I valori per simplified_name non può essere facilmente generato in MySQL, quindi potresti voler utilizzare un linguaggio di programmazione generico per estrarre tutti gli artisti, trasformarli in nomi semplificati, quindi popolare il database con i risultati.

Una volta fatto, puoi usare questa query:

SELECT DISTINCT artist
FROM artists
ORDER BY simplified_name