0

いくつかの機能上の問題がある古い php アプリケーションを使用しています。テーブル内のIDをリセットするように設計されているように見える次のコードに出くわしました:

    SET @num := 0;
    UPDATE `pop_table` SET id = @num := (@num+1);
    ALTER TABLE `pop_table` AUTO_INCREMENT =1;

それで... ':=' 演算子は一体何のためにあるのでしょうか?? - そして、この特定のスニペットの代わりになるものは何ですか?

私はここで検索しました、php.net、google、明らかに「:=」は小さすぎるか、見つけにくいか、または適切な検索をコミットする方法がわかりません。ご意見ありがとうございます。

4

4 に答える 4

5

つまり、SQL is := は、少なくとも MySQL で有効な代入です。

于 2012-09-10T17:12:06.860 に答える
4

これは PHP コードではありません。それはMySQLです。

これは、MySQL 関数です。

SET @num := 0

これは、値0が変数に割り当てられることを意味します ( MySQL マニュアル@numを参照してください) 。

これはで使用されます

UPDATE pop_table SET id = @num := (@num+1);

より理解しやすくするために、同等の PHP は次のようになります。

$num = 0;(これは実際に比較するものではありません。アイデアを得るために)

アップデート

推奨されないPHPソリューションを実行するというコメントに触発されました。

$query = mysql_query("SELECT id FROM pop_table ORDER BY id ASC");
$id = 0;
while($result = $mysql_fetch_assoc($query)) {
    $id++
    mysql_query("UPDATE pop_table SET id = " . $id . " WHERE id=" . $result["id"]);
}
mysql_query("ALTER TABLE `pop_table` AUTO_INCREMENT =1;");

テストしませんでしたが、動作するはずです。

于 2012-09-10T17:13:08.737 に答える
4

これは、MySQL で使用される代入演算子です。

通常、MySQL コードを PHP コードに変換することはできません。MySQL は、データベース テーブルにクエリを実行し、いくつかの基準に一致するデータを返すために使用されます。

PHP は多くのことを行うために使用できるプログラミング言語ですが、MySQL コードを PHP コードに置き換えると (そうする方法を見つけたと仮定して)、PHP スクリプトが非常に遅くなる可能性があります。

PHP マニュアル
MySQL マニュアル

于 2012-09-10T17:13:58.803 に答える
1

あなたはそれがすでにMysqlの代入演算子であることを知っています...@numはデータベース変数です。

しかし、スニペット全体は何をしますか?これは、ループ内のテーブル全体の「id」フィールドを1からNまでの適切な増分範囲に更新します。ここで、Nは行の総数です。最初に更新された行は、値1、次の行2、次に3を取得します。 、など...最後に、id列の性質を自動的にインクリメントする列に変更します。(これは、自動インクリメントカウンターの現在の値を現在の最大値より1つ大きくリセットするのに役立つ可能性があります。よくわかりません。)

なぜそれをPHPに変換する必要があるのですか?これは1回だけ実行することを目的としており、データベースをクリーンアップするためだけに使用されます。以上です。また、時々実行したい場合は、データベースの外部で実行してもまったく意味がありません。

于 2012-09-10T19:00:30.273 に答える