在此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
答案 0 :(得分:4)
您的credits
列必须是字符串。因此,MySQL使用字符串比较来排序结果。而且,当您比较11
和2
字符串时,2
比11
“更大”(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将这样处理它并将返回你想要的结果(数字排序而不是字符串比较)