我有这张桌子:
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
有人有想法吗?
答案 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