数据库里有一个表a,表a有一个字段b为字符串类型,里面的数据大多为88a242 ,88a106,88a109,92a129,92a068,2000a291,2000a216,2014a063,2014a315这样的字符串,求教各位大神,如何排序?
排序后应为: 88a106,88a109,88a242,92a068,92a129,2000a216,2000a291,2014a063,2014a315
回复讨论(解决方案) $s='88a242,88a106,88a109,92a129,92a068,2000a291,2000a216,2014a063,2014a315';$arr=explode(',',$s);natsort($arr);echo ;print_r($arr);echo
;
$str='88a242,88a106,88a109,92a129,92a068,2000a291,2000a216,2014a063,2014a315';$str1=str_replace('a','.',$str);$arr=explode(',',$str1);sort($arr,sort_numeric);$str2=implode(',',$arr);$str3=str_replace('.','a',$str2);echo $str3;
88a106,88a109,88a242,92a068,92a129,2000a216,2000a291,2014a063,2014a315
不好意思,忘记说明了,因为是从数据库里,所以希望读出来的时候就已经是排好的,而不是需要再用php处理的
那你为什么不排序好后,再存入数据库,无能为力了...
create temporary table t (a varchar(10));insert into t (a) values ('88a242'),('88a106'),('88a109'),('92a129'),('92a068'),('2000a291'),('2000a216'),('2014a063'),('2014a315');select * from t order by lpad(a, 10, '0');
a 88a106 88a109 88a242 92a068 92a129 2000a216 2000a291 2014a063 2014a315
建议存数据的时候同时存入hash值,查找的时候按照hash排序
至于怎么计算hash值,查查,不难。
create temporary table t (a varchar(10));insert into t (a) values ('88a242'),('88a106'),('88a109'),('92a129'),('92a068'),('2000a291'),('2000a216'),('2014a063'),('2014a315');select * from t order by lpad(a, 10, '0');
a 88a106 88a109 88a242 92a068 92a129 2000a216 2000a291 2014a063 2014a315
可以啦,求解?,lpad(a, 10, '0') lpad(str,len,padstr)
返回字符串 str, 其左边由字符串padstr 填补到len 字符长度。假如str 的长度大于len, 则返回值被缩短至 len 字符。