有没有一种优雅的方式可以在MySQL数据库中进行性能良好的自然排序?

例如,如果我有这个数据集:

  • 最终幻想
  • 最终幻想 4
  • 最终幻想 10
  • 最终幻想 12
  • 最终幻想 12: Chains of Promathia
  • 最终幻想 Adventure
  • 最终幻想 Origins
  • 最终幻想 Tactics

除了将游戏名称拆分为组件之外,还有其他elegant种解决方案吗

  • Title: "最终幻想"
  • Number: "12"
  • Subtitle:"Promathia之链"

以确保它们以正确的顺序出现?(4之后10,而不是2之前).

这样做对a**来说是一种痛苦,因为时不时会有另一款游戏打破解析游戏名称的机制(例如《战锤40000》、《詹姆斯·邦德007》)

推荐答案

我想这就是为什么很多东西都是按发布日期排序的.

解决方案可能是在表中为"SortKey"创建另一列.这可能是标题的净化版本,符合您创建的模式,以便于排序或计数器.

Mysql相关问答推荐

从 SQL 中的左连接和内连接中减去计数

MySQL过滤食谱上的多对多 - 成分表

进行 MySQL COUNT 查询

如何查看 rdsadmin 在 mysql 实例上的权限?

是否可以从 .SQL 文件中计算表中的行数?

仅获取今天在 laravel 中创建的记录

phpMyAdmin - 错误 > 格式参数不正确?

MySQL 8.0 上的 phpMyAdmin

如何找到 MySQL 进程列表并杀死这些进程?

Sequelize Query 查找日期范围内的所有记录

Laravel 迁移错误:语法错误或访问冲突:1071 指定的键太长;最大密钥长度为 767 字节

用于 UNIX 套接字文件的 mysqld_safe 目录“/var/run/mysqld”不存在

无法在 ubuntu 16 上使用 --skip-grant-tables 重置 root 密码

连接到 docker-compose mysql 容器会拒绝访问,但运行相同映像的 docker 不会

如何解决 mysql 警告:“InnoDB:page_cleaner:1000ms 预期循环花费了 XXX 毫秒.设置可能不是最佳的”?

Sequelize:销毁/删除表中的所有记录

UTF-8 字符有问题;我看到的不是我存储的

服务器时区值“AEST”无法识别或代表多个时区

AWS:无法从我的机器连接到 RDS 数据库

用于判断名称是否以元音开头和结尾的 SQL 查询