长期的读者,这里的首次海报。

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

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

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

SELECT artist FROM songs GROUP BY artist ORDER BY artist ASC

但是,此查询的结果是将名称为&i,+ NURSE和2007excalibur2007的艺术家按字母顺序排序(例如AcousticBrony,ClaireAnneCarr,d.notive等)。

我需要的是艺术家的姓名,其名称以字母和字母顺序排序的艺术家列表之后的数字和符号开头。

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

最佳答案

这会将所有名字不以字母开头的艺术家放在没有名字的艺术家之前:

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

看到它在线上工作:sqlfiddle

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

artist            | simplified_name
------------------------------------
&i                | i
+NURSE            | nurse
2007excalibur2007 | excalibur
simplified_name的值无法在MySQL中轻松生成,因此您可能希望使用通用编程语言来提取所有艺术家,将他们转换为简化的名称,然后用结果填充数据库。

完成此操作后,您可以使用以下查询:
SELECT DISTINCT artist
FROM artists
ORDER BY simplified_name

关于php - 如何对MySQL结果排序,字母首,符号首?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11641370/

10-16 13:45