老读者,第一次张贴在这里。
我正在尝试弄清楚如何为我正在编写的音乐应用对艺术家列表进行排序。
为了帮助理解数据库结构:我没有一个关系系统,其中歌曲表中的每首歌曲都有一个引用艺术家表中一行的艺术家 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 查询中完成的优雅方式。
最佳答案
这会将所有名字以 a 到 z 中的字母开头的艺术家放在那些不以字母开头的艺术家之前:
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/26003775/