PHP中的Mysql - 如何只更新表中的一行但具有最大的id号

Kal*_*reg 15 php mysql max

我正在尝试更新我的数据库中的字段,但遇到了这样一个简单的问题:我想更新表中最大id号的一行.我会做那样的事情:

UPDATE table SET name='test_name' WHERE id = max(id)
Run Code Online (Sandbox Code Playgroud)

不幸的是它不起作用.有任何想法吗?

表结构

id | name
---|------
 1 | ghost
 2 | fox
 3 | ghost
Run Code Online (Sandbox Code Playgroud)

我想只更新最后一行,因为ID号是最好的.

ibl*_*lue 64

MAX()在这个位置不可能使用.但你可以这样做:

UPDATE table SET name='test_name' ORDER BY id DESC LIMIT 1;
Run Code Online (Sandbox Code Playgroud)


小智 6

UPDATE table SET name='test_name' WHERE id = (SELECT max(id) FROM table) 
Run Code Online (Sandbox Code Playgroud)

此查询将返回错误,因为您无法从正在更新的同一个表中执行 SELECT 子查询。

尝试使用这个:

UPDATE table SET name='test_name' WHERE id = (
    SELECT uid FROM (
        SELECT MAX(id) FROM table AS t
    ) AS tmp
)
Run Code Online (Sandbox Code Playgroud)

这会创建一个临时表,它允许对 UPDATE 和 SELECT 使用相同的表,但以性能为代价。


Muh*_*rar -6

先选择最大id,然后更新。

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

  • 我不明白为什么人们会如此强烈地反对这一点。它只需要对 MySQL 进行一个小修复:“UPDATE table SET name='test_name' WHERE id = (SELECT max(id) FROM (SELECT * FROM table))”。当您决定投反对票时留下评论也是一个好习惯,以便回复者知道如何改进答案。 (12认同)
  • 这将失败,并出现 MySQL 错误 #1093:“您无法在 FROM 子句中指定要更新的目标表“表””。MySQL 不支持在使​​用子查询读取表时更新表。 (7认同)