排序表正则表达式

时间:2017-02-18 13:00:58

标签: php sql sorting

我有这张桌子:

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

如何对表进行排序以返回顺序中的记录(当/然后是升序数字时,从a到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
有人有想法吗?

2 个答案:

答案 0 :(得分:0)

使用PHP和SUBSTRING_INDEX()建议使用MySQL。您可以使用order by (case when substring_index(text, '/', -1) rlike '^[0-9]+') then substring_index(text, '/', -1) end) asc, substring_index(text, '/', -1) + 0, text

"temp_logout"

第一个按顺序排列非数字(在最后一个“字段”中)。第二个按数字值排序。最后一个排序是最后一个“字段”具有相同值。

您的示例不起作用,因为没有值包含后跟空格的字母。

答案 1 :(得分:0)

非常感谢这个解决方案:]

但仍有一个小问题:]

查询如下所示:

$ query =“SELECT * FROM text order by CASE when(substring_index(text,'/', - 1)rlike'^ [0-9] +')THEN substring_index(text,'/', - 1)END ASC, substring_index(text,'/', - 1)+ 0,文本ASC “;

并将其返回:

111/0 / A

111 / AB

111 / ST

111 / CDFG

111/1

一分之一百一十一-KS

111/2

5分之111

67分之111

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

111 / AB

111 / ST

111 / CDFG

111/0 / A

111/1

一分之一百一十一-KS

111/2

5分之111

67分之111

如何做到这一点?:D