Mysql select order by 的行为就像一个字符串,而不是一个数字

发布于 2024-09-07 20:44:18 字数 360 浏览 6 评论 0原文

如果您的数字可能低于或大于 0,您如何按数字排序?

Mysql 表示例:

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

select 查询示例

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

我得到的结果是这样的(用逗号分隔):5,2,0,-8,-3。 不应该是5,2,0,-3,-8吗? 我在互联网上的某个地方发现mysql按字符串排序。如何让它按数字排序?

How do you order by number if your number can fall below and be bigger than 0?

Example Mysql table:

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

Example select query

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

The result I get is this (separated by comma): 5,2,0,-8,-3.
Shouldn't it be 5,2,0,-3,-8?
I discovered somewhere in the internet that mysql orders by string. How to make it order by number?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

尘曦 2024-09-14 20:44:18

如果您将 Karma 设为字符串(即 varchar 列),则它会作为字符串进行排序。

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

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

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

但这对性能不利。

Karma will be ordered as a string if you have made it a string, i.e. a varchar column.

Convert the column to a INT, and it will order numerically.

You also have the option of not changing the table, but casting the column into the right type while sorting:

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

but that is bad for performance.

厌味 2024-09-14 20:44:18

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

SELECT karma FROM table ORDER BY karma+0 DESC

There's another weirdest option:

SELECT karma FROM table ORDER BY karma+0 DESC
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文