2017-02-18 48 views
0

我有這個表:排序表的正則表達式

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 

有人有想法嗎?

回答

0

使用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 

第一個「由數值(場「第一,爲了第二個訂單和最終的排序是當最後一個。把非數字在最後一個)「字段「有着相同的價值觀

您的例子不工作,因爲沒有值包含字母后面有一個空格

0

該解決方案非常感謝:]

但仍有一個小問題:]

查詢看起來像這樣:

$查詢=「由 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