Я создаю живой счет для соревнований по драматургии. У меня есть таблица в базе данных
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.