以下是字符串的一些示例(主要是地址):
12
20
43-B
43-C
123
2500
现在我把它们放在我认为“正确”的顺序中。如果我将这些值放在数据库表的列中并在 MySQL 搜索中返回这些值,我会得到:
12
123
20
2500
43-B
43-C
显然这是不正确的——20
不大于123
。
如果我可以保证该值由纯整数组成,则很容易弄清楚这一点,但是当您输入43-B
and 43-C
(或什12A
至或其他)时,我们就会开始遇到问题。但是,我不能简单地去掉数字!我不完全确定它在这一点上代表什么,但我确实有诸如40W1
.
就个人而言,我会将其排序在 40 而不是 4000 之下,但这是一种非常罕见的极端情况,所以我不太担心这个特定的例子。不过,我确实需要记住这些字母,因为40B
会在之前出现40C
——但我也希望40-B
在之前出现40C
。很棘手,对吧?我知道。
不过,我愿意假设只有字母数字字符(即-
从字符串中删除)。
我想要做的是将该字符串转换为一系列绝对可排序的数字。
例如,43-B
可能会变成10000031205
(填充)之类的东西,并与行的其余部分一起存储在数据库中。当我搜索我的地址时,我现在可以按排序列进行排序,一切都井井有条!
我不能做的事情:
- 在运行时直接比较它们
- 在 MySQL 中进行此搜索(该值需要逐行计算)
- 在 PHP 中使用 sort/asort/ksort 或任何排序函数
我需要一个可以存储在我的数据库或搜索索引中的值,以便以后进行排序!
不幸的是,到目前为止,我的所有尝试都未能产生我想要的结果。有任何想法吗?