データベースから投稿を削除するコードがいくつかあります。
mysql_query("DELETE FROM `posts` WHERE ID = '$id'");
ここで、削除された投稿に追いつくために、自動インクリメントから 1 を引いた値を設定したいと思います。これは可能ですか?もしそうなら、どうすればいいですか?ありがとう!
データベースから投稿を削除するコードがいくつかあります。
mysql_query("DELETE FROM `posts` WHERE ID = '$id'");
ここで、削除された投稿に追いつくために、自動インクリメントから 1 を引いた値を設定したいと思います。これは可能ですか?もしそうなら、どうすればいいですか?ありがとう!
You can manually set the AUTO_INCREMENT
value (http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html), but that's a bad idea.
First, say there are 5 posts. If the post with ID 3 is deleted, you can't really set the auto-increment to 3 because IDs 4 and 5 are still in use.
Second, if there are any references to that ID in another table that didn't get deleted then those references will be bad when that ID is reused.
In general, auto-increment values are meant to be used once only. You can get around this if you want, but there's really no reason to.
あなたは本当にこれをしたくありません。
次のことが起こると想像してください。
新しい投稿が ID 100 で作成されました 新しい投稿が ID 101 で作成されました 新しい投稿が ID 102 で作成されました 投稿 100 が削除されました... 投稿カウンターが 101 になりました 新しい投稿が ID 101 で作成されました
これで 101 の ID が 2 つになりましたか? 制約が許せば、それは悪いことです。彼らがあなたを許さないなら、それは不可能です。
いずれにせよ、「id 101」を永遠に死なせておくのが最善です。見逃すことはありません。さらに数十億の数字から選択できます...
alter table yourtable auto_increment=5
おそらく、サブクエリを使用してカウントを取得できます。
alter table yourtable auto_increment=(yourtable から count(*) を選択) + 1
これがあなたがやりたいことだと本当に確信していますか?最後の行ではなく「途中」の行を削除すると、これが壊れることに注意してください。