php - 如何用字母在前,符号在后对 MySQL 结果进行排序?

标签 php mysql arrays sorting

老读者,第一次张贴在这里。

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

为了帮助理解数据库结构:我没有一个关系系统,其中歌曲表中的每首歌曲都有一个引用艺术家表中一行的艺术家 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/

相关文章:

javascript - 提交表格并停留在同一页面上?

php - 如何查询没有 '(single quote) and display the result with '(单引号)的单词?

mysql - 以结果作为列进行多对多查询

java - 安卓 : How to select Random value from an Array and then remove that selected value

javascript - React javascript - json如何将多个数组元素合并为一个字符串

c++ - 结构体(数组)中出现次数最多的数字

PHP 绑定(bind) PDO 数组

nginx - 如何通过解析nginx日志文件自动拒绝ip地址

php - 德鲁帕尔 8 : how can I add a class in form tag

mysql - 如何以正确的方式创建具有相似数据的表?