0

ログイン ID として使用したい自動インクリメント ユーザー ID フィールドを持つユーザー テーブルがあります。ユーザー ID フィールドの形式は、1、2、3、4、5 などです。

ただし、次のようなselectステートメントを実行すると:

SELECT * FROM user WHERE userid='0001'

上記のステートメントは、ユーザー ID '1' の情報を返します。「1」の前に「0」をいくつ入れても、常にユーザー ID「1」のレコードを取得します

正確なユーザーIDと一致する場合にのみ結果を返すようにする方法を教えてください(つまり、入力したときにユーザーIDが1のユーザーのレコードを返しuserid=1、そうでない場合はuserid=00000001)

これを十分に明確に説明していなかったら申し訳ありません。私はオンライン チュートリアルを実行して SQL を習得しようとしていますが、とてもイライラします :(

4

6 に答える 6

2

ID が次の場合は、これを使用してください。予約済みのキーワードであるため、バッククォートで囲むintことも忘れないでください。user

SELECT * FROM `user` WHERE userid=0001;

またはこれ:

SELECT * FROM `user` WHERE userid=1;

あなたが言及したように、正確な ID レコードが必要です

于 2013-02-03T12:23:42.127 に答える
2

整数と文字列の比較を混同しています。ID が INT の場合、整数として比較されます (したがって、末尾のゼロは省略されます)。

于 2013-02-03T12:24:11.467 に答える
2

これは、自動インクリメントが INT (NUMBER) 型であり、(SQL varchar で) 文字列比較を探しているためです
。列の型を VARCHAR にして、このステートメントを使用する必要があります。

select * from user where userid like '0001'  

また

select * from user where userid like '%0001%'
于 2013-02-03T12:24:37.213 に答える
2

ユーザー ID が の場合int、これは予期される動作です (00001 = 1)。

ID をvarcharフィールドにすると役立ちます。ただし、これは素晴らしいアイデアとは言えません。000001の隣を許可するのはなぜ001ですか? それは問題を引き起こすにちがいないが、(私にとっては)目に見える利点はない。

自動的に増加する ID (1 2 3 4 5 ....) を持つか、ユーザーがレコードを作成するときに生成される完全にランダムな文字列を持ちます。後者は、人々が他のユーザーの ID を推測することを不可能にします。これは、特定の状況下では良いことです。

于 2013-02-03T12:24:45.580 に答える
1

使用LIKE::

SELECT * FROM user WHERE userid LIKE '0001'
于 2013-02-03T12:23:23.227 に答える
1

列のデータ型userIDは ですINT。ステートメントを作成し、条件を on にするとuserID、mysql は暗黙的にそれをにキャストします。INTそのため、文字列0001は と同等1です。

userIDのデータ型をVARCHAR( string ) に変更し、 をインクリメントするアルゴリズムを作成することをお勧めしますuserID列が文字列の場合、0001は と等しくありません1

于 2013-02-03T12:25:27.027 に答える