【问题描述】:

如果你的数字可以低于并大于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 按字符串排序。如何按编号排序?

【问题讨论】:

  • 欢迎来到 SO。请在询问数据库问题时,始终指定列的类型。

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


【解答1】:

还有一个最奇怪的选择:

SELECT karma FROM table ORDER BY karma+0 DESC

【问题讨论】:

  • 不错!不知道 mySQL 做到了。尽管如此,它还是一个隐含的演员阵容,不利于性能。
  • @ne5tebio 可破解?你是说外面的?我不这么认为。这将如何运作?
  • 这比转换成 INT 更快吗?
【解答2】:
如果您将

Karma 设为字符串,即 varchar 列,则会将其作为字符串排序。

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

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

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

但这对性能不利。

【问题讨论】:

  • 嗯,我以为 varchar 可以解决问题,但我错了。谢谢!
  • 正确的方法是存储这个值是一个INT,而不是一个VARCHAR,使用有符号值,这样你就可以做负数。它会提高你的性能,而且你可以在 PHP 代码不知道值的情况下添加|减去列,这是另一个性能改进。