MySQL上的订单正在返回1,11,2,22,而不是1,2,11,22


Order on MySQL is Returning 1,11,2,22 not 1,2,11,22

在这个MySQL查询中,排序是逐位对所有结果进行排序。我想要的只是先返回最小的数字。我是不是搞错了,或者这只是PHP的排序方式?

MySQL:

$history = mysqli_query($con,"SELECT id,credits,timeadded FROM users ORDER by credits ASC);

返回结果(仅限积分):

1,13,14,16,2,24,29,3,31

期望结果:

1,2,33,14,16,24,29,31

您的credits列必须是字符串。因此MySQL使用字符串比较来排序结果。例如,当比较112字符串时,211"大"(2是比1大的字符)。

你应该这样做:

SELECT id,credits,timeadded FROM users ORDER by CAST(credits AS UNSIGNED)

然后MySQL将信用作为一个数字进行比较:11将大于2

顺便说一句,如果你只把数字存储在这个列中,为什么它是VARCHAR类型的?您可以使用ALTER TABLE语句进行更改:

ALTER TABLE users MODIFY credits INTEGER;

如OlivierH 所述

您的学分列必须是字符串。所以MySQL使用字符串比较排序您的结果。

修改您的表,使"credits"列为INT或根据需要,但仍然是一个数字,因此MySql会将其视为INT,并根据您的需要返回结果(按数字排序,而不是按字符串比较)