Mysql порядок выбора действует как строка, а не число - PullRequest
6 голосов
/ 01 июля 2010

Как сделать заказ по номеру, если ваш номер может упасть ниже и быть больше 0?

Пример таблицы Mysql:

|Name|Karma|
 __________
|Me  | -8  |
|Bill|  5  |
|Tom |  2  |
|Saly|  0  |
|San.| -3  |

Пример запроса выбора

$sql="SELECT karma FROM table ORDER BY karma DESC";

Я получаю следующий результат (через запятую): 5,2,0, -8, -3.Разве это не должно быть 5,2,0, -3, -8?Я обнаружил где-то в Интернете, что MySQL заказывает по строкам.Как сделать заказ по номеру?

Ответы [ 2 ]

17 голосов
/ 01 июля 2010

Karma будет упорядочено как строка, если вы сделали ее строкой, то есть столбец varchar.

Преобразуйте столбец в INT, и он будет упорядочен численно.*

У вас также есть возможность не изменять таблицу, а приводить столбец к нужному типу при сортировке:

SELECT karma FROM table ORDER BY CAST(karma AS int) DESC

, но это плохо сказывается на производительности.

14 голосов
/ 01 июля 2010

Есть еще один странный вариант:

SELECT karma FROM table ORDER BY karma+0 DESC
...