MySQL不允许这种“自然排序”,因此,获取所需内容的最佳方法似乎是按照上述方式拆分数据设置(单独的id字段等),否则,根据数据库中的非标题元素、索引元素(日期、数据库中插入的id等)执行排序。
让数据库为您进行排序几乎总是比将大数据集读入您选择的编程语言并在那里排序要快,因此,如果您对这里的数据库模式有任何控制,那么请考虑如上所述添加易于排序的字段,从长远来看,这将为您节省大量的麻烦和维护。
网站上不时会出现添加“自然排序”的请求
MySQL bugs
和
discussion forums
,许多解决方案都围绕着剥离数据的特定部分并将其转换为
ORDER BY
查询的一部分,例如。
SELECT * FROM table ORDER BY CAST(mid(name, 6, LENGTH(c) -5) AS unsigned)
这种解决方案可以用于上面的最终幻想示例,但不是特别灵活,也不太可能完全扩展到数据集,比如“战锤40000”和“詹姆斯·邦德007”。