6

PHPのmysql_query()関数を使用してmysqlテーブルを更新する必要があります。したがって、1つのステートメントで次のUPDATEクエリを送信する必要があります。

SET @i = 0;

UPDATE mytable SET id=(@i:=@i+1);

次のようなテーブルエイリアスを使用してSELECTステートメントでこれを実行できるいくつかの例を読みました。

SELECT @rn:=@rn+1 AS rank, t1.* FROM (SELECT * FROM mytable) t1, (SELECT @rn:=0) t2

使用する必要のあるUPDATEステートメントでこれらのテーブルエイリアスを使用する方法はありますか?

編集:

Topher Huntの回答に基づいて、次を使用してmytableのコピーを作成できると思います。

CREATE TABLE mytable_copy SELECT @ rn:= @ rn + 1 AS id、t1。* FROM(SELECT * FROM mytable)t1、(SELECT @rn:= 0)t2

次に、mytableを削除し、mytable_copyの名前をmytableに変更します。

このステートメントは、mytableにあるものと同じフィールドタイプと長さで、mytableの正確なコピーを作成しますか?

4

2 に答える 2

3

テーブル間でJOINを使用する場合、構文はSELECTステートメントとUPDATEステートメントの間で非常に似ています。例:

SELECT * 
FROM table1 a
    JOIN table2 b ON a.something = b.something ## (conditions for linking tables)
    JOIN table3 c ON b.something = c.something
WHERE a.something = 'value'

3つのテーブルを結合するSELECTステートメントは、SELECT行を削除し、FROMという単語をUPDATEに変更し、変更する内容を示す「SET」句を追加するだけで、UPDATEステートメントに変えることができます。このような:

UPDATE table1 a
    JOIN table2 b ON a.something = b.something ## (conditions for linking tables)
    JOIN table3 c ON b.something = c.something
SET a.variable = 'value2', 
    b.something = 'value3',
    c.somethingelse = 'value4'
WHERE a.something = 'value';

必要に応じて、同時に多くのフィールドに変更を加えることができます。各SET項目をコンマで区切るだけです。

于 2012-10-09T14:55:32.337 に答える
0

この列を削除して、auto_incrementを使用して主キーとして新しい列を追加してみませんか?これにより、必要な値が自動的に割り当てられます。

ALTER TABLE mytable DROP COLUMN id;

ALTER TABLE mytable ADD ( id int AUTO_INCREMENT PRIMARY KEY );

-or- as you requested...

UPDATE mytable
  JOIN (SELECT @xxx := 0) AS v1 
   SET id = (@xxx := @xxx + 1)
;
于 2012-10-09T22:56:32.623 に答える