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)