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_idことですint

于 2012-09-11T09:54:19.410 に答える
0

テーブルにuserのエントリが複数ある場合は、groupbyを使用してorderbyieを試してください。SELECT user_id FROM user_rights GROUP BY user_id ORDER BY CONVERT(int,user_id) DESC;

于 2012-09-11T10:05:37.550 に答える
0

ユーザー ID フィールドは であるvarchar(64)ため、アルファベット順、降順で並べ替えています (SQL クエリで必要なため)。これを考えると、出力は正確です。

ユーザー ID のデータ型を変更するか、常に整数になることが保証できる場合は、整数にキャストする必要があります。

于 2012-09-11T09:55:50.157 に答える