首頁 > 後端開發 > php教程 > 求教一个MYSQL数字和字母混合排序问题

求教一个MYSQL数字和字母混合排序问题

WBOY
發布: 2016-06-23 13:48:42
原創
1557 人瀏覽過

数据库里有一个表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 "<pre class="brush:php;toolbar:false">";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 字符。

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板