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

时间:2010-07-01 19:21:13

标签: php mysql numbers int sql-order-by

如果您的号码低于0且大于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 个答案:

答案 0 :(得分:17)

Karma如果您将其设为字符串,即varchar列,则会以字符串形式排序。

将列转换为INT,它将按数字顺序排列。

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

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

但这对性能不利。

答案 1 :(得分:14)

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

SELECT karma FROM table ORDER BY karma+0 DESC