MySQL. Числовая сортировка по идентификатору строки

Я создаю живой счет для соревнований по драматургии. У меня есть таблица в базе данных

id time k2 16,010 k4 15,11 k25 15,819 k26 15,114 z27 19,696 

Мне нужно получить эту таблицу в обратном порядке по id . Например, если выбрать SELECT id FROM online order by id desc результат будет отсортирован как string .

 id k9 k8 k7 k6 k5 k4 k3 k17 k16 k15 k14 

Мне нужно 17-14-9-4

Upd. СПАСИБО ЗА ВСЕ!!! Это помогло

 SELECT CAST( replace( id, 'k', '' ) AS SIGNED ) AS sort FROM online ORDER BY `sort` DESC 

Разделите поле на два, одно с «k» и другое с номером.

Альтернативно, менее предпочтительно, если вы используете PHP, вы можете использовать метод nat_sort() или, возможно, usort() используя strnatcmp() для сравнения этого конкретного поля.

Проблема заключается в вашей схеме. У вас должен быть столбец для части письма. Тогда вы можете сделать

 SELECT CONCAT(letter, id) FROM online ORDER BY id ASC 

Кроме того, вы должны называть letter чем-то описательным.

EDIT: Если письмо имеет важное значение при сортировке (неясно, есть оно или нет), вы должны:

 SELECT CONCAT(letter, id) FROM online ORDER BY letter, id ASC 

Предполагая, что структура совместима с одной буквой, за которой следуют цифры, вы можете сделать что-то вроде:

 Select ... From online Order By Substring(Id, 1, 1) Desc , Cast( Substring(Id, 2, Len(id)) As int ) Desc 

Эвно получить это 🙂

 SELECT CAST( replace( id, 'k', '' ) AS SIGNED ) AS sort FROM online ORDER BY `sort` DESC 

Вы не можете отсортировать его таким образом, эфир добавьте 0 (k09 – k04) или добавьте другое поле, которое является int.