2009-03-14 14 views
3

私はPHPとPHPMyAdminを使用して小規模なプロフィールサイトを作成しています。 私はメンバーにID番号を与えています。これは現在データベースの中で最大の番号です+1PHPのMySQLクエリが間違った結果を返す

私はそれが欲しいところでPHPスクリプトを入手する前に25回のテストを行いました。

その後、PHPMyAdminを使用してこれらの25個のエントリを削除しました。私のPHPコードがない

しかし、今は、この:

function getLatestID() { 
    $query = "SELECT max(member_id) FROM members"; 
    $result = @mysql_query($query) or showError("unable to query database for user information"); 
    if (!($record = mysql_fetch_array($result))) return null; 
    return $record[0]; 
} 

は私が間違った番号を取得します。

テストシナリオは:データベーステーブルはと、3つの項目を保持しているIDの1、2及び

3.私はデバッグセッションを開始し、リターン$record[0]にブレークポイントを置きます。私は最大の数で、その内容およびその代わりの3が、それは25 + 3 = 28の場合と同様に28

、私は出回っ削除25のエントリです...

が原因何誰を知っていますチェック これと私はそれをどのように修正することができますか?

答えて

6

これは、auto_incrementが設定されていて、クエリが最も高いIDを返すためです。他のレコードを削除すると、おそらく自動増分カウントはリセットされませんでした。

+0

実際、これで解決しました。 – Vordreller

+0

将来的にはこれを把握していない場合は、任意のテーブルの[Operations]タブに移動してリセットすることができます。 – VirtuosiMedia

5

auto_incrementをMySQLで使用している場合、レコードを削除しても次の値は減少しません。

TRUNCATE TABLE mytableでテーブルを空にすると、値がリセットされます。

+0

ありがとう、それはそれを解決しました。 truncateコマンドがすべての値を削除するのは悪いことです。私は3つのエントリだけを置き換えることができて幸運です。何千ものエントリーを想像してみてください。今私は人々が通常、テーブルからエントリを削除しない理由を理解しています。 – Vordreller

+0

@Vordreller:ナンセンス;テーブルからエントリを削除しても問題ありません。 AUTO_INCREMENT IDが奇跡的に再計算されることを期待しているわけではなく、実際には壊れた設計を示しています。それは "AUTO_MAX"ではなく "AUTO_INCREMENT"です。 –

3

ます。また、自動インクリメントを割り当てるための次の値であると考えて値を変更することができます

ALTER TABLE members AUTO_INCREMENT = 3; 

(注)自動インクリメント列の現在の最大値よりも小さい値に置けばということを値をそのMAX + 1に変更します。現在の次の値は、これを実行するように設定されているかを確認するには:

SHOW CREATE TABLE members; 

をテーブル定義の終わりには、それはそれの現在の値が何であれ、「AUTO_INCREMENT = 26」を表示したります。

関連する問題