Проблема с помощью MySQL Заказать BY - Могу ли я использовать Natsort, чтобы исправить это?
Вопрос
Мне нужно использовать естественную сортировку с результатом MySQL, поскольку в настоящее время он сортирует свои значения int следующим образом:
- 1
- 123
- 1256
- 22
- 231
так далее
Пока мне понадобится его, как
- 1
- 22
- 231
- 1256
Я знаю о функции «НАСОРТ», но она не работает для результата запроса MySQL. Как я могу сортировать (естественно), возможно ли это сделать в запросе?
Спасибо за помощь!
Редактировать: пример запроса $result = mysql_query("SELECT * FROM forums ORDER BY 'posts' DESC;");
Не совсем уверена, если мое использование DESC существует, но он не бросает ошибку, поэтому она должна быть в порядке. К сожалению, кажется, не имеет никакого эффекта ...
Решение
Запрос, который вы разместили, есть сортировка по постоянному строковому выражению, а не имя или положение столбца. Либо используйте BackTicks для цитата, либо вывезти цитаты:
SELECT * FROM forums ORDER BY `posts` DESC
или, может быть
SELECT * FROM forums ORDER BY posts DESC
Объяснит, почему изменение между ASC и DESC не имеет никакого эффекта.
Первоначальный ответ был:
Описываемый вами заказ сортировки, предполагает, что значения INT на самом деле хранятся в виде типа символа (или, возможно, преобразованы в символ перед сортировкой).
Проверьте, храняте ли вы данные в цифровом или символьном типе. Если возможно, используйте числовой тип, то порядок естественного сортировки будет так, как вам требуется. если ты неверно Измените текущий тип данных, чтобы быть INT, вы можете сделать это в вашем запросе (например, использование В РОЛЯХ), вероятно, по стоимости производительности.
Другие советы
Если бы посты были столбцами без int, вы можете попробовать это:
SELECT * FROM forums ORDER BY CAST(`posts` AS INT) DESC
Также посмотрите на http://drupal.org/project/natsort.. Отказ Это модуль Drupal, который можно использовать для облегчения сортировки MySQL.
Этот вопрос Имеет ответ на MySQL, который я использовал.