Проблема с MySQL ORDER BY - могу ли я использовать natsort, чтобы это исправить? - PullRequest
1 голос
/ 01 февраля 2010

Мне нужно использовать естественную сортировку с результатом MySQL, поскольку в настоящее время мои значения INT сортируются следующим образом:

  • 1
  • 123
  • 1256
  • 22 * ​​1010 *
  • 231

[и т.д.]

Хотя мне нужно было бы отсортировать как

  • 1
  • 22 * ​​1022 * * * 231 тысяча двадцать-три
  • 1256

Мне известна функция "natsort", но она не работает для результата запроса MySQL. Как я могу отсортировать (естественно), возможно ли сделать это в запросе?

Спасибо за помощь!

РЕДАКТИРОВАТЬ: Пример запроса $result = mysql_query("SELECT * FROM forums ORDER BY 'posts' DESC;");

Не совсем уверен, допустимо ли мое использование DESC, но оно не выдает ошибку, поэтому должно быть в порядке. К сожалению, кажется, что изменение DESC на ASC также не имеет никакого эффекта ...

Ответы [ 3 ]

2 голосов
/ 01 февраля 2010

Отправленный вами запрос состоит в сортировке по строковому выражению, а не по имени столбца или позиции. Либо используйте кавычки для цитирования, либо убирайте кавычки:

SELECT * FROM forums ORDER BY `posts` DESC

или, может быть,

SELECT * FROM forums ORDER BY posts DESC

Объяснит, почему переключение между ASC и DESC не имеет никакого эффекта.

Первоначальный ответ был:

Порядок сортировки, который вы описываете, предполагает, что значения INT на самом деле хранятся как символьный тип (или могут быть преобразованы в символ перед сортировкой).

Проверьте, храните ли вы данные в числовом или символьном виде. Если возможно, используйте числовой тип, тогда естественный порядок сортировки будет таким, как вам требуется. Если вы не можете изменить базовый тип данных на INT, то вы можете сделать это в своем запросе (например, используя CAST ), возможно, за счет производительности.

1 голос
/ 15 ноября 2012

Если сообщения были столбцом не-INT, вы можете попробовать это:

SELECT * FROM forums ORDER BY CAST(`posts` AS INT) DESC

Также посмотрите на http://drupal.org/project/natsort. Это модуль Drupal, который можно использовать для облегчения сортировки MySQL.

0 голосов
/ 01 февраля 2010

На этот вопрос есть ответ для MySQL, который я использовал.

...