按字母顺序和数字排序邮政编码?

时间:2018-01-29 11:34:09

标签: php mysql database

我有一个邮政编码的数据库表,它只是与邮政编码的第一部分一起存储。当我通过邮政编码查询表格和订单时,我得到以下结果:     HG1       - HG2       - HG3       - HG4

 - HU1
 - HU10
 - HU13
 - HU2
 - HU3
 - HU4
 - HU5
 - HU6
 - HU7
 - HU8
 - HU9

 - HX1
 - HX2
 - HX3
 - HX4
 - HX5
 - HX6

 - LN1
 - LN2
 - LN4
 - LN5
 - LN6

我想要的是按数字顺序列出的邮政编码以及字母顺序。我已经尝试按长度使用顺序,但是这会按字母顺序混乱,因为它在任何3个之前放入任意2个字符,所以我最终得到:       - S6       - S8

 - S9

 - B66

 - BB5
 - BB6

 - BD2
 - BD3
 - BD4
 - BD5
 - BD6
 - BD7
 - BD8
 - BD9

有没有办法解决这个问题而不在数据库中添加额外的列?

提前致谢!

2 个答案:

答案 0 :(得分:1)

natsort应该有用。

  

此函数实现了一种排序算法,该算法以人类维持键/值关联的方式对字母数字字符串进行排序。

List<T>

<强>输出

$arr = [
'S9',
'B66',
'BB5',
'BB6',
'BD2',
'BD3',
'BD4',
'BD5',
'BD6',
'BD7',
'BD8',
'BD9'
];
natsort ($arr);
print_r($arr);

答案 1 :(得分:1)

@ Sougata的答案会做到这一点,但在PHP中 - 所以你需要查询整个结果集然后对它进行排序。

如果你想在查询中本地进行这种排序,你可以使用regexp来确定邮政编码是1或2个字母,然后将它分成两部分(字母/数字)并用数字{做一个子句{1}}到无符号整数:

CAST

enter image description here