4

我有这样的查询

SELECT user_id FROM user_rights ORDER BY user_id DESC;

为什么它会给我那些乱七八糟的数字?

USER_ID
4
4
4
4
3
3
21
21
21
21
21
21
20
20

它没有按预期对数字进行排序。

证明:http ://sqlfiddle.com/#!2/c753a/1

我知道它们可能是按字母顺序或数字顺序排列的,买我不明白为什么这个结果如此奇怪......

4

3 回答 3

5

这是因为user_id不是数字。

试试这个,

SELECT user_id 
FROM user_rights 
ORDER BY CAST(user_id as SIGNED) DESC;

SQLFiddle 演示

另一种解决方案是将列的数据类型更改user_idint

于 2012-09-11T09:54:19.410 回答
0

您的 userid 字段是 a varchar(64),因此它按字母顺序降序排序(根据 SQL 查询的要求)。鉴于此,您的输出完全正确。

您应该更改您的用户 ID 数据类型,或将其转换为整数(如果您可以保证它始终是整数)。

于 2012-09-11T09:55:50.157 回答
0

hey if there are multiple entries of user in table than you can use group by and than try order by i.e.SELECT user_id FROM user_rights GROUP BY user_id ORDER BY CONVERT(int,user_id) DESC;

于 2012-09-11T10:05:37.550 回答