Mysql按字符串选择顺序,而不是数字

Ais*_*tis 6 php mysql int numbers sql-order-by

如果您的号码低于0且大于0,您如何按号码订购?

示例Mysql表:

|Name|Karma|
 __________
|Me  | -8  |
|Bill|  5  |
|Tom |  2  |
|Saly|  0  |
|San.| -3  |
Run Code Online (Sandbox Code Playgroud)

示例选择查询

$sql="SELECT karma FROM table ORDER BY karma DESC";
Run Code Online (Sandbox Code Playgroud)

我得到的结果是这个(用逗号分隔):5,2,0,-8,-3.不应该是5,2,0,-3,-8?我在互联网上的某处发现mysql按字符串排序.如何按号码订购?

Pek*_*ica 17

Karma如果你把它作为一个字符串,即一个varchar列,它将被作为字符串排序.

将列转换为a INT,它将以数字顺序排序.

您还可以选择不更改表,但在排序时将列转换为正确的类型:

SELECT karma FROM table ORDER BY CAST(karma AS int) DESC
Run Code Online (Sandbox Code Playgroud)

但这对性能不利.

  • 正确的方法是存储此值是INT,而不是VARCHAR,使用有符号值,这样就可以做负数.它可以提高您的性能,而且您可以在不知道值的情况下添加|减去列,这是另一个性能改进. (3认同)

Cri*_*ian 14

还有另一个最奇怪的选择:

SELECT karma FROM table ORDER BY karma+0 DESC
Run Code Online (Sandbox Code Playgroud)