背景:需求就是这样突然就降临了,没错这次就是要把一个非纯数字的字段进行排序,假设字段“name”均如:tab_3,tab_8....这样的。我走了好多弯路,查了很多“古籍”。。。终于让我想到了解决方式,因此我还掌握了一门新招式,我才知道mysql居然也有字符截取,,,好了废话不多说了下面进入正题
首先直接上代码逻辑:
$arr = select text,name,substring(name,5,2) as new_name * from table_name;
这个语句关键在于substring(name,5,2) as new_name 把你需要排序的字段进行分隔获取到数字部分(给个小提示尽量as一个新名字,因为你页面展示的肯定还是没有截取过的值啊,不然领导会找你事儿的。。。我也不知道我表达清楚没)
本来吧我想写的还没写完想直接后面再加个 order by new_name desc; 但是。。。order by跟有病一样只排列了前几个数值后面就不对了所以我只能放弃了
继续结合php使用吧,不要慌我不会让你们用循环的多麻烦啊
$rows_arr = array_column($arr,'new_name');
array_multisort($rows_arr,SORT_ASC,$arr);
ok你再打印一下$arr数组我相信应该是你要的结果了。。。。end...
----------------------------------------------------------------------------手动分割线--------------------------------------------------------------------
既然都说起了sql的字符截取了,顺便就把其他的也记录一下吧:
1、从左开始截取字符串
left(str, length)
说明:left(被截取字段,截取长度)
例:select left(content,200) as abstract from my_content_t
2、从右开始截取字符串
right(str, length)
说明:right(被截取字段,截取长度)
例:select right(content,200) as abstract from my_content_t
3、截取字符串
substring(str, pos) (推荐使用)
substring(str, pos, length)
说明:substring(被截取字段,从第几位开始截取)
substring(被截取字段,从第几位开始截取,截取长度)
例:select substring(content,5) as abstract from my_content_t
select substring(content,5,200) as abstract from my_content_t
(注:如果位数是负数 如-5 则是从后倒数位数,到字符串结束或截取的长度)
4、按关键字截取字符串 (这个我首先用了一下,反正我是报错,不知道各位仁兄会不会也出错)
substring_index(str,delim,count)
说明:substring_index(被截取字段,关键字,关键字出现的次数)
例:select substring_index("blog.jb51.net","。",2) as abstract from my_content_t
结果:blog.jb51
(注:如果关键字出现的次数是负数 如-2 则是从后倒数,到字符串结束)