MySQL: сортировка «1-й» ДО «101-го» - PullRequest
3 голосов
/ 29 апреля 2011

В одном из полей моей базы данных у меня есть числа, которые включают порядковые суффиксы.Я пытаюсь отсортировать их по возрастанию, но поскольку числа включают порядковые суффиксы, строке «101-е» присваивается большее значение, чем «1-му», и аналогично «29-е» большее значение, чем «2d».1002 * Кто-нибудь знает, как я мог бы обойти это, не удаляя порядковые суффиксы каждой цифры?

Ответы [ 4 ]

5 голосов
/ 29 апреля 2011
order by cast(field as unsigned)
2 голосов
/ 29 апреля 2011

Как и er ... @nick rulez ... сказал, что вы можете отсортировать запрос по производному столбцу, в этом случае приведя его к целому числу на лету.

Это должно работать для небольших наборов, но если у вас большой набор или много трафика, то, возможно, стоит сохранить это число в своем индексируемом столбце, чтобы ускорить ваши запросы.

0 голосов
/ 03 июля 2013

У меня была похожая проблема с упомянутой здесь. Я хотел реализовать естественную сортировку, не обрабатывая эти данные на другом языке, таком как PHP natsort (). Я нашел это решение, и оно отлично сработало для меня.

ORDER BY LENGTH(field), field
0 голосов
/ 29 апреля 2011

Тип столбца, вероятно, является буквенно-цифровым типом и поэтому сортируется в соответствии с правилами алфавитного порядка. Столбец должен иметь числовой тип, чтобы сортировать его по числовым правилам. Я бы настоятельно рекомендовал использовать для столбца числовой тип (int), в этом случае он будет иметь много преимуществ по сравнению с буквенно-цифровыми типами, а единственным недостатком является потеря суффикса. Однако, как только вы получите значение, добавление суффикса к полученному значению должно быть простым.

Есть ли в mysql функция для возврата числа с порядковым суффиксом? предлагает способы добавления суффикса к значению.

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