MySQL.Числовая сортировка по идентификатору строки - PullRequest
1 голос
/ 26 апреля 2011

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

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

Ответы [ 5 ]

1 голос
/ 26 апреля 2011

В конце концов получите это:)

SELECT CAST( replace( id, 'k', '' ) AS SIGNED ) AS sort
FROM online
ORDER BY `sort` DESC
1 голос
/ 26 апреля 2011

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

Select ...
From online
Order By Substring(Id, 1, 1) Desc
    , Cast( Substring(Id, 2, Len(id)) As int ) Desc
1 голос
/ 26 апреля 2011

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

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

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

РЕДАКТИРОВАТЬ: Если буква важна при сортировке (неясно,это или нет) тогда вы бы сделали:

SELECT CONCAT(letter, id) FROM online ORDER BY letter, id ASC
1 голос
/ 26 апреля 2011

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

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

0 голосов
/ 26 апреля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...