Cela placera tous les artistes dont le nom commence par une lettre de a à z avant ceux qui ne le font pas :
SELECT DISTINCT artist
FROM songs
ORDER BY artist REGEXP '^[a-z]' DESC, artist
Voyez-le fonctionner en ligne :sqlfiddle
Mais vous préférerez peut-être stocker une deuxième colonne avec le nom simplifié afin de pouvoir les mettre dans un ordre plus logique :
artists
artist | simplified_name
------------------------------------
&i | i
+NURSE | nurse
2007excalibur2007 | excalibur
Les valeurs de simplified_name
ne peut pas être facilement généré dans MySQL, vous pouvez donc utiliser un langage de programmation à usage général pour extraire tous les artistes, les transformer en noms simplifiés, puis remplir la base de données avec les résultats.
Une fois cela fait, vous pouvez utiliser cette requête :
SELECT DISTINCT artist
FROM artists
ORDER BY simplified_name