我想在表中存储一个附加列作为“排序值”,它是标题列的数字表示,这样这些值的顺序就代表了字符串的自然字母排序顺序。即,这样我就可以检索按排序值排序的行,它们将按自然排序顺序 - 当我插入新行时,我可以生成数值并知道相对于其他值的值将代表字符串的位置在字母搜索中,精确到前 X 个字母左右。
这有几个原因:首先,我想要一个比数据库服务器提供的简单排序更自然的排序,其中“The”和“A”之类的东西和标点符号在开始时会被忽略,而数字会被“自然”处理'。
其次,这适用于具有大量排列的索引 - 它会节省空间,并且可能会在遍历具有许多行的索引时节省时间。
我所追求的是将字符串转换为该数值的算法,或者我想只是一个规范化的字符串值。
我正在使用 PHP 和 MySQL。
恐怕“从数据库中提取所有内容并使用 natcasesort() 在 PHP 中排序”不是这种特殊情况的解决方案,因为我想在它们之前按排序顺序检索行(使用 order by 和 group by)得到一个连接或限制子句。谢谢。
编辑:
感谢您到目前为止的回答。我突然想到,我的应用程序使用 UTF-8 的事实非常相关。话虽如此,我认为以压缩/数字形式表示字符串的初始部分的实用性是一种延伸,可能只是某种规范化形式(所有大小写折叠,数字零填充,以及尽可能多的字符)归一化到它们的根,即 ã 到 a) 是合适的。