有没有一种优雅的方式可以在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相关问答推荐

MySQL在带有特定属性值上的对象的数组的杨森对象中搜索

我可以指示MariaDB-Install-db和MariaDB忽略配置中的用户设置吗?

子查询是否可以按主查询中的列进行分组?

我是否需要在 N+1 列上建立索引,才能有效地在 N 列上执行 SELECT,并按其他列排序?

错误:此查询集包含对外部查询的引用,并且只能在子查询中使用

如果其中一个表为空,则 mysql 中的查询会给出 0 个结果

MySQL:根据条件查找某些用户的行位置

过滤查询结果

正则表达式模式相当于 mysql 中的 %word%

查询给出错误时的 mySQL Group_Concat 和 Case

如何使用 IF() 条件在 MySQL 中显示真假行

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

添加一个日期字段大于另一个日期字段的要求

如何使用 laravel 连接 mysql?

在 MySQL 中,我应该 Select 哪种排序规则?

按日期和时间降序排序?

在 MySQL Workbench EER 图中的多个列上创建唯一约束

MySQL错误 1005 (HY000): 无法创建表 'foo.#sql-12c_4' (errno: 150)

SQL WHERE 列 = 一切

在 PHP 中运行 MySQL *.sql 文件