web-dev-qa-db-ja.com

Mysql in PHP-テーブルの1行のみを更新する方法(ただし、ID番号は最大)

私は自分のDBのフィールドを更新しようとしていますが、そのような単純な問題に悩まされています。最大のID番号を持つテーブルの1つの行だけを更新したいのです。私はそのようなことをします:

UPDATE table SET name='test_name' WHERE id = max(id)

残念ながら動作しません。何か案は?

テーブルの構造

id | name
---|------
 1 | ghost
 2 | fox
 3 | ghost

ID番号が一番大きいので最後の行だけを更新したい。

15
Kalreg

この位置ではMAX()を使用できません。しかし、これを行うことができます:

UPDATE table SET name='test_name' ORDER BY id DESC LIMIT 1;
63
iblue
UPDATE table SET name='test_name' WHERE id = (SELECT max(id) FROM table) 

更新している同じテーブルからSELECTサブクエリを実行できないため、このクエリはエラーを返します。

これを使ってみてください:

UPDATE table SET name='test_name' WHERE id = (
    SELECT uid FROM (
        SELECT MAX(id) FROM table AS t
    ) AS tmp
)

これにより一時テーブルが作成され、UPDATEとSELECTに同じテーブルを使用できますが、パフォーマンスは低下します。

4
Bryn

Iblueの方法がおそらく最善の策だと思います。しかし、別の解決策は、結果を変数として設定し、その変数をUPDATEステートメントで使用することです。

SET @max = (SELECT max(`id`) FROM `table`);
UPDATE `table` SET `name` = "FOO" WHERE `id` = @max;

これは、同じIDで複数のクエリを実行することを期待している場合に便利ですが、更新操作を1つだけ実行している場合に2つのクエリを実行するのはあまり理想的ではありません。

4
Lachlan McD.
_UPDATE table_NAME
SET COLUMN_NAME='COLUMN_VALUE' 
ORDER BY ID 
DESC LIMIT 1;
_

_SELECT IN DELETE OR UPDATE CLAUSE.ORDER BY ID DESC LIMIT 1_を使用できないため。これは、あなたがやろうとしたような最大値MAX(ID)を持つIDを与えます。ただし、MAX(ID)は機能しません。

2
Yanks

古い質問ですが、これに遭遇した人にとってはこれを行うこともできます:

UPDATE
     `table_name` a
JOIN (SELECT MAX(`id`) AS `maxid` FROM `table_name`) b ON (b.`maxid` = a.`id`)
SET a.`name` = 'test_name';
1
WaveTyler

max()関数を使用してレコードを更新できます。おそらくそれが役立つでしょう。

 UPDATE MainTable
 SET [Date] = GETDATE()
 where [ID] = (SELECT MAX([ID]) FROM MainTable)

perfectが機能します。

0
kishan Radadiya