Расширение предложения ORDER BY для оценки условия более чем на 1 целое число - PullRequest
0 голосов
/ 05 апреля 2010

У меня есть некоторый PHP-код, который позволяет мне сортировать столбцы в порядке возрастания и убывания (по щелчку заголовка строки таблицы), и это хорошо. Он отлично работает для моего столбца D.O.B (с типом поля даты / времени), но не для столбца количества.

Например, у меня есть количества 10, 50, 100, 30 и еще 100.

Порядок, похоже, оценивает только 1-е целое число, поэтому моя сортировка столбца заканчивается в следующем порядке: 10, 100, 100, 30, 50 ... и 50, 30, 100, 100, 10 .

Это, очевидно, неверно, так как 100 больше 50, поэтому оба значения 100 должны обязательно появляться в конце? Мне кажется, что 100 учитывается только как имеющее значение «1», тогда оно появляется перед 10, потому что система распознает, что у него есть еще 0.

Это нормально? Есть ли способ, которым я могу решить эту проблему? Спасибо за любую помощь. Постскриптум При необходимости я могу показать код, но хотел бы знать, является ли это распространенной проблемой по умолчанию.

Ответы [ 6 ]

0 голосов
/ 05 апреля 2010

Ваш столбец является текстовым типом. Вы можете изменить тип столбца навсегда или привести его в порядок при выполнении сортировки.

Таблица изменения (может потребоваться другое значение по умолчанию)

 ALTER TABLE [Table]
MODIFY COLUMN [Column] INTEGER UNSIGNED NOT NULL DEFAULT '0';

Или разыграть при сортировке

SELECT *
  FROM [Table]
 ORDER BY CAST([Column] as UNSIGNED INTEGER) ASC;
0 голосов
/ 05 апреля 2010

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

ORDER BY CAST(theColumn AS DECIMAL(5, 2)) 

http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html

0 голосов
/ 05 апреля 2010

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

0 голосов
/ 05 апреля 2010

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

0 голосов
/ 05 апреля 2010

Звучит так, будто вы сортируете, рассматривая эти значения как строки, а не как числа.Что делает сортировка?PHP или MySQL?Трудно сказать, что не так, не видя код, который на самом деле его сортирует.

0 голосов
/ 05 апреля 2010

Ваше поле, вероятно, определено как char / varchar / text / ..., т.е. как строковый тип , а не числовой тип . В этом случае выполняется лексикографическая сортировка.

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