資料庫裡有一個表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 字元。