在这个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使用字符串比较来排序结果。例如,当比较11
和2
字符串时,2
比11
"大"(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,并根据您的需要返回结果(按数字排序,而不是按字符串比较)