2013-03-17 4 views
1

я построил запрос здесь с помощью MySQL Workbench:Заказать MySql по номеру запроса, не заказав по целому ряду

USE wcms; 
SELECT PLA_FNAME, PLA_LNAME, PLA_GS FROM player ORDER BY PLA_GS DESC; 

Затем он отображает эти результаты:

enter image description here

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

+0

Каков тип столбца 'PLA_GS'? – JodyT

+1

Очевидно, что вы используете неправильный тип данных - это происходит, когда числа помещаются в типы данных _text_. Сделайте его подходящим числовым типом данных, и ваша проблема исчезнет. – CBroe

ответ

6

Попробуйте это утверждение порядка

ORDER BY PLA_GS + 0 desc 
0

Актерский является правильным решением, это может работать для ленивых:

ORDER BY PLA_GS+0 DESC 
0

Попробуйте это:

ORDER BY Cast(PLA_GS as int) DESC 

Запрос:

USE wcms; 
SELECT PLA_FNAME, PLA_LNAME, PLA_GS FROM player ORDER BY Cast(PLA_GS as int) DESC; 
0

Эта «ошибка сортировки» (1) происходит при использовании текстовых типов данных для хранения чисел. Команда

DESCRIBE player; 

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

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

Кроме того, вы сэкономите место на жестком диске и ускорьте свой запрос. int s требует гораздо меньше памяти, чем сохранение чисел в формате ascii (что и происходит при использовании, например, varchar), а сравнение целых чисел намного быстрее, чем сравнение (возможно, длинных) текстовых элементов.

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

(1) На самом деле ошибка. Просто характерная сортировка.

0

Спасибо всем за вашу помощь. Проблема заключалась в том, что столбец был неправильным типом данных, как указано ранее в комментарии. Это было исправлено путем установки в столбце с междунар:

ALTER TABLE PLAYER MODIFY COLUMN PLAY_GS INT(3); 

Затем, выполнив запрос:

SELECT PLA_FNAME, PLA_LNAME, PLA_GS FROM player ORDER BY PLA_GS DESC; 

дал мне результаты правильно упорядоченные.

Смежные вопросы