問題:
主キー フィールドは'ID'
データはコマンドを使用して挿入/更新されますREPLACE INTO
。これは使いやすいですが、残念ながら、'ID'
置き換えられるレコードの値が増加します。
ID
したがって、次のようにフィールドを完全に再構築する方法が必要です。
| ID | Name |
|===============
| 21 | deer |
| 8 | snow |
| 3 | tracks |
| 14 | arrow |
に行く:
| ID | Name |
|===============
| 1 | deer |
| 2 | snow |
| 3 | tracks |
| 4 | arrow |
私はphpを介してそれを行う必要があります。
現在の試み:
<?php
$reset = "SET @num := 0;
UPDATE `users` SET `ID` = @num := (@num+1);
ALTER TABLE `users` AUTO_INCREMENT =1;";
$con = mysql_connect("mysql2.000webhost.com","db_user","password");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("db_name", $con);
if (!mysql_query($reset,$con))
{
die('<h1>Nope:</h1>' . mysql_error());
}
mysql_close($con);
?>
そしてしようとしています:
$reset = "ALTER TABLE `users` DROP `ID`;
ALTER TABLE `users` AUTO_INCREMENT = 1;
ALTER TABLE `users` ADD `ID` int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;`";
も結果が出ませんでした。
すべての奇妙さ
私が試した$reset
コマンドはどちらも MySQL で完全に実行されますが、何らかの理由で PHP からは正しく動作しません。
答え
答えが指摘したように、@ 変数は接続ごとに保持されるため、複数のクエリを実行することは完全に合理的です。
///Trigger multiple queries
$nope = '<h1>Nope:</h1> ';
$res1 = "SET @num := 0;";
$res2 = "UPDATE `users` SET `ID` = @num := (@num+1);";
$res3 = "ALTER TABLE `users` AUTO_INCREMENT =1;";
if (!mysql_query($res1,$con)) die($nope . mysql_error());
if (!mysql_query($res2,$con)) die($nope . mysql_error());
if (!mysql_query($res3,$con)) die($nope . mysql_error());
mysql_close($con);