2016-03-07 2 views
1

У меня есть таблица с именем seat, который содержит следующие записи:колонка Сортировать по последней букве в записях

+----+------+ 
| ID | Seat | 
+----+------+ 
| 1 | 1a | 
+----+------+ 
| 2 | 1b | 
+----+------+ 
| 3 | 2a |  
+----+------+ 
| 4 | 2b | 
+----+------+ 
| 5 | 3a | 
+----+------+ 
| 6 | 3b | 
+----+------+ 
| 7 | 4a | 
+----+------+ 
| 8 | 4b | 
+----+------+ 
| 9 | 10a | 
+----+------+ 
| 10 | 10b | 
+----+------+ 
| 11 | 11a | 
+----+------+ 
| 12 | 11b | 
+----+------+ 
| 13 | 12a | 
+----+------+ 
| 14 | 12b | 
+----+------+ 

Я хочу заказать результат на основе последнего символа второго столбца seat так что мой стол :

+----+------+ 
| ID | Seat | 
+----+------+ 
| 1 | 1a | 
+----+------+ 
| 3 | 2a |  
+----+------+ 
| 5 | 3a | 
+----+------+ 
| 7 | 4a | 
+----+------+ 
| 9 | 10a | 
+----+------+ 
| 11 | 11a | 
+----+------+ 
| 13 | 12a | 
+----+------+ 
| 2 | 1b | 
+----+------+ 
| 4 | 2b | 
+----+------+ 
| 6 | 3b |  
+----+------+ 
| 8 | 4b | 
+----+------+ 
| 10 | 10b | 
+----+------+ 
| 12 | 11b | 
+----+------+ 
| 14 | 12b | 
+----+------+ 

Как достичь этого результата? какие функции я должен использовать?

+1

Это показывает недостаток в дизайне базы данных. Вас интересует отдельная информация «строка» (1,2,3, ...) и «место в строке» (a, b), но вместо этого вы сохраняете комбинированные значения, приводящие к проблемам сейчас. Поэтому лучший ответ, вероятно: не пытайтесь найти запрос для этого, но вместо этого измените свою модель данных. –

+0

Да, я думаю об этом. Не могли бы вы указать мне лучшую модель? –

+0

'id' +' seat_row' + 'seat_place' вместо' id' + 'seat'. –

ответ

1

В первой, вы можете использовать right по заказу последнего значения (т.е. знак), а затем бросить всю строку без знака (т.е. в MySQL, 11a превращается в 11):

order by right(`seat`, 1), cast(`seat` as unsigned) 

SQLFiddle

+0

Спасибо, это сработало некоторое время. Проблема возникает, когда я вставляю десятки значений, таких как '10a',' 10b', '11a',' 11b', смешанные с приведенными выше значениями. Результат идет ужасно неправильно –

+0

@AnggieAriWidhia: Обновлено – potashin

+0

Решено, я использую эту 'SELECT * FROM' bus' ORDER BY RIGHT (seat, 1), CAST (seat AS unsigned) '. Сначала я заказываю столбец на основе последней буквы записей, а затем заказываю их численно. –

Смежные вопросы