如何用字母排序MySQL结果,符号最后?

Jac*_*ett 5 php mysql arrays sorting

长期读者,这里的第一次海报.

我正在试图弄清楚如何为我正在写的音乐应用程序排序艺术家列表.

为了帮助理解数据库结构:我没有一个关系系统,其中歌曲表中的每首歌曲都有一个艺术家ID,引用艺术家表格中的一行,我只是有一个歌曲列表,其中艺术家的名字作为一个列中的字符串.然后我GROUP BY artist在MySQL查询中使用返回单个艺术家的列表.

我的应用程序以JSON编码数组的形式从我的服务器检索这些数据,该数组是以下MySQL查询的结果:

SELECT artist FROM songs GROUP BY artist ORDER BY artist ASC
Run Code Online (Sandbox Code Playgroud)

但是,此查询会导致名称为&i,+ NURSE和2007excalibur2007的艺术家在字母结果之前排序(例如AcousticBrony,ClaireAnneCarr,d.notive等).

我需要的是艺术家,他们的名字以字母排序的艺术家名单后面的数字和符号开头.

该解决方案可以基于PHP,但我更喜欢在MySQL查询中完成它的优雅.

Mar*_*ers 11

这将使所有名字的艺术家以az开头的字母开头,而不是:

SELECT DISTINCT artist
FROM songs
ORDER BY artist REGEXP '^[a-z]' DESC, artist
Run Code Online (Sandbox Code Playgroud)

看到它在线工作:sqlfiddle


但您可能更喜欢使用简化名称存储第二列,以便您可以按照更有意义的顺序放置它们:

artists

artist            | simplified_name
------------------------------------
&i                | i
+NURSE            | nurse
2007excalibur2007 | excalibur
Run Code Online (Sandbox Code Playgroud)

simplified_name在MySQL中无法轻松生成值,因此您可能希望使用通用编程语言来提取所有艺术家,将其转换为简化名称,然后使用结果填充数据库.

完成后,您可以使用此查询:

SELECT DISTINCT artist
FROM artists
ORDER BY simplified_name
Run Code Online (Sandbox Code Playgroud)