排序表的正则表达式

问题描述:

我有这个表:排序表的正则表达式

id | text 
1 111/Aa 
2 111/Sa 
3 111/1 
4 111/2 
5 1111/3 
6 1111/bbbbbbbb 

如何表中返回的顺序排序记录(从字母的第一个记录到z时/然后递增的数字):

111/Aa 
1111/bbbbbbbb 
111/Sa 
111/1 
111/2 
1111/3 

我想是这样的:

SELECT * 
FROM table 
ORDER BY IF(text RLIKE '[a-z] ', 1, 2) , text ASC; 

,但我得到的东西:/

111/1 
111/2 
111/3 
111/AB 
111/bbbbbbbb 
111/Sa 

有人有想法吗?

使用PHP和RLIKE建议MySQL。您可以使用SUBSTRING_INDEX()

order by (case when substring_index(text, '/', -1) rlike '^[0-9]+') 
       then substring_index(text, '/', -1) 
      end) asc, 
     substring_index(text, '/', -1) + 0, 
     text 

第一个“由数值(场“第一,为了第二个订单和最终的排序是当最后一个。把非数字在最后一个)“字段“有着相同的价值观

您的例子不工作,因为没有值包含字母后面有一个空格

该解决方案非常感谢:]

但仍有一个小问题:]

查询看起来像这样:

$查询=“由 CASE当SELECT * FROM文本顺序(SUBSTRING_INDEX(文字, '/',-1)RLIKE '^ [0-9] +')THEN SUBSTRING_INDEX (text,'/',-1)END ASC, substring_index(text,'/',-1)+ 0,text ASC “;

,并返回它:

111/0/A

111/AB

111/ST

111/CDFG

111/1

111/1-KS

111/2

五分之一百一十一

六十七分之一百一十一

为什么 “111/0/A” 作为第一个? ...作为规则号码在/被履行之后...而不是那种方式:

111/AB

111/ST

111/CDFG

111/0/A

111/1

111/1-KS

111/2

五分之一百一十一

六十七分之一百一十一

以及如何做到这一点?d