2

その奇妙な問題。

最初の列が(PRIMARY、AUTO_INCREMENT)である通常のusersテーブルがあります。ID正常に動作します。フォームが機能するかどうかを確認しながら、ランダムなデータを挿入しました(テーブルではなく、フォーム自体を介して)。そして、それらのエントリを削除しました。さて、明らかにいいえ。テーブルの行数は減少しましたが、ID値は保持されました。したがって、ある時点IDで、テーブルの最後は567ありませんでした。行のはでした540。(ギャップは27

しかし、今日、私はテーブルのエントリを再確認し、ギャップがに増加しました89。(最後IDは1809年で、行数はでした1720)。これはどのように可能ですか?その後、他のユーザーのフォームを開いたときに、他のエントリを削除することはありませんでした。

私のテーブルの構造USERS

ID-->PRIMARY,A_I
EMAIL-->VARCHAR(60),UNIQUE
NAME-->VARCHAR(60)

ユーザーが登録するとID、選択した電子メールIDのメールでユーザーに通知されます。

別のフォームでイベントの予約席を申請する際、ユーザーはチームメンバーのIDを入力する必要があります。テーブルに入力されたIDを確認し、USERSそこから結果を取得して、別のテーブルに追加しますEVENTS。phpコードの形式は次のとおりです。

   $members=array containing the IDs entered by the user of his/her team members.
        $result_rows = mysql_query("SELECT * FROM users");
                $num_rows = mysql_num_rows($result_rows);
                foreach($members as $key=>$value){
                    if ($value>($num_rows+89))
                    $err[]="Error. One of the ID you entered doesnot exist";
}
            }
4

1 に答える 1

0

システムからユーザーを削除するにはどうすればよいですか?

Auto_incrementフィールドはまさにそれを行います-新しい行ごとに、+1します。削除してもかまいません。それに応じてインクリメントするだけです。

したがって、John Doeを追加し、そのレコードを削除して読み取った場合、新しいIDは2になります。ID1はなくなります。次に、Jane Doeを追加、削除、読み取り、新しいIDは4ですが、テーブルには2つのレコードしかありません。

したがって、あなたの場合、IDが567のとき、1809に到達するには89のユーザーレコードを削除する必要がありました。

または、テーブル構造に応じて、別の可能なオプションはINSERT IGNOREになります。たとえば、複製されたユーザーJohn Doeを2回挿入しようとし、Unique Key制約がある場合、IDは新しいものがなくても自動インクリメントされます。レコードが追加されます。

最後の注意-それは本当に問題ではないはずです。データベースにIDを処理させます。本当に1、2、3などが必要な場合。アプローチ、あなたはあなた自身を構築する必要があります。

于 2013-02-15T05:57:14.453 に答える