0

次のコードがあります。

$GetUID = $c->query("SELECT UserUID FROM dbo.Users_Master ORDER BY UserID DESC");
$UserUniqueID = $GetUID->fetch(PDO::FETCH_ASSOC);
$UUID = $UserUniqueID['UserUID'];
$NewUUID = $UUID + 1;

これは正常に機能していますが、問題は私のクエリにあります。

データベースには常に 12 が入力されています。

Microsoft SQL クエリ ウィンドウに移動して、次のように入力しました。

USE UserData;
SELECT UserUID FROM dbo.Users_Master ORDER BY UserID DESC

そして返されました:

11, 17, 15, 19, 16, 18, 10, 13, 12, 14, 3

これは、最高から最低への正確な順序付けではありません。

私はそれから使い続けました:

USE UserData;
SELECT UserUID FROM dbo.Users_Master ORDER BY UserID ASC

返されたもの:

3、14、12、13、10、18、16、19、15、17、11

最高の UserUID を取得し、それを +1 したいのですが、コードが常に11を選択するのはなぜですか?

4

1 に答える 1

4

のように聞こえますUserIddatatype ではありません。値を注文intできます:cast()

SELECT UserUID 
FROM dbo.Users_Master 
ORDER BY cast(UserID as int) DESC

デモで SQL Fiddle を参照してください

ただし、最善の解決策は、格納されているものと一致するようにテーブルのデータ型を変更することです。

SQL Server でテーブルを変更するには、次を使用します。

alter table dbo.Users_Master alter column UserID int;

これにより、データが正しいデータ型で格納されるcast()ため、値を並べ替える必要がなくなります。

UserId編集#1、 varcharであるコメントに基づいて、ORDER BY UserUID DESCどちらがint

于 2013-02-04T22:16:36.727 に答える