2017-02-18 4 views
0

У меня есть эта таблица:Сортировка таблиц регулярных выражений

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

Как сортировать таблицу, чтобы вернуть записи в порядке (первые записи букв от А до Я, когда/то восходящие числа):

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

Большого спасибо за этим решение:..]

но есть еще небольшая проблема :]

запрос выглядит следующим образом:

$ запрос = «SELECT * FROM текста порядке случай, когда (SUBSTRING_INDEX (текст, '/', -1) RLIKE '^ [0-9] +') ТОГДА SUBSTRING_INDEX (текст, '/', -1) END ASC, substring_index (текст, '/', -1) + 0, текст ASC ";

и возвращает его:

111/0/А

111/AB

111/ст

111/cdfg

111/1

111/1-KS

111/2

111/5

111/67

почему "111/0/A" в качестве первого? ... как номер правила после/выполняется ...а не тот, что путь:

111/аб

111/ул

111/cdfg

111/0/A

111/1

111/1-KS

111/2

111/5

111/67

и что делать, чтобы это произошло?: D