2012-02-15 3 views
2

Как я могу решить эту маленькую проблемуSQL Сортировка терпит неудачу

вот скриншот:

enter image description here

и это запрос:

SELECT * 
FROM serverinfo 
ORDER BY rank_pts DESC 

Как вы можете видеть порядок является интродуцированным.

ответ

0

Изменить rank_pts FLOAT *edit. Похоже, что это неправильный тип для сортировки

+0

но разобьется «» – Dave

+3

Мех, +1 для реализации типа, вероятно, VARCHAR, но -1 предложившего Int, когда он явно имеет десятичные значения, которые он должен хранить. Так что +0 от меня. – Interrobang

+0

Да, вы правы @Interrobang. Извини за это ! – seanbreeden

4

Кажется, что ваш столбец ranl_pts является varchar, поэтому он не сортируется как цифры.

Используйте ниже трюк.

SELECT * 
    FROM serverinfo 
    ORDER BY rank_pts+0 DESC 

ИЛИ

SELECT * 
    FROM serverinfo 
    ORDER BY CAST(rank_pts AS DOUBLE) desc 
+0

спасибо чувак :-) – Dave

8

Вы можете попробовать это:

ORDER BY CAST(rank_pts as float) DESC 
3

Вы, вероятно, следует изменить этот тип столбца с плавающей точкой. Как указывали другие, он выглядит как колонка varchar или text. Если это не так, и PHPMyAdmin просто отображает его в локализованном формате (десятичные числа, представленные вместо, - для нас, английских людей), пожалуйста, любезно проигнорируйте остальную часть моего ответа.

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

Я бы сохранил данные в виде поплавка в БД и обработал любую логику о том, как отображать его в локализованном формате на стороне приложения.

+2

+1. Оставьте форматирование на передней панели. Хранение форматированных значений делает приложения очень хрупкими. – Leigh

3

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

Очевидно, что быстрое исправление заключается в том, чтобы вывести столбец в order by, как уже указывали другие кодеры.

+2

Я действительно разочарован тем, что многие из рассмотренных выше вопросов касаются быстрого исправления, а не фактического решения. –

0
SELECT * 
FROM serverinfo 
ORDER BY CAST(Rank_Pts AS DOUBLE) desc 
Смежные вопросы