关于MySQL的命令是返回1,11,2,22而不是1,2,11,22

时间:2013-11-26 11:23:23

标签: php sorting mysqli

在此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,3,13,14,16,24,29,31

2 个答案:

答案 0 :(得分:4)

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

你应该这样:

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

然后MySQL会将比较视为一个数字:11将大于2

BTW,如果您只将数字存储到此列中,为什么它是VARCHAR类型? 您可以使用ALTER TABLE语句对其进行更改:

ALTER TABLE users MODIFY credits INTEGER;

答案 1 :(得分:2)

如OlivierH所述

  

您的信用栏必须是字符串。所以MySQL使用字符串比较   订购结果。

修改你的表,以便'credtis'列将是INT或根据需要,但仍然是一个数字,所以MySql将这样处理它并将返回你想要的结果(数字排序而不是字符串比较)