我需要做一些看似非常简单的事情:
$bdd->query('UPDATE mytable SET aaa = \''.$aaa.'\', bbb = \''.$bbb.'\' WHERE name = \''.$name.'\'');
我的问题:我有多条匹配此“WHERE”的记录,我想只更新最新的记录(我有一个日期和一个可用于定义哪条记录最新的ID)
如何更改我的WHERE以添加“ AND id = the_highest_id_of_this_query ”之类的内容?
答案 0 :(得分:21)
您可以limit
到update
仅限最近的记录
UPDATE your_table
SET some_column = 1
order by date_time_column desc
limit 1
其中date_time_column
可以是指示记录顺序的任何列。它也可以是一个自动增量ID。
答案 1 :(得分:3)
UPDATE table
SET column = value
WHERE primary_key =
(
SELECT primary_key
FROM table
WHERE date_time_column = (select max(date_time_column) FROM table WHERE other_conditions)
)
AND other_conditions
此查询不使用order by或limit子句,因此可以移植。请注意,在内部查询和外部查询中,other_conditions必须相同。
(因为这是在评论中发布的)为什么内部查询需要与外部查询具有相同的条件?
如果内部条件获取的结果集比外部条件更宽,则最终可能会得到一个date_time_column,它早于满足外部条件的行中包含的那个。然后AND
将导致获取0行。
如果内部条件获取比外部条件更窄的结果集,则最终可能会错过任何较新的记录,而不是内部集合的一部分,但作为外部条件的一部分已满足。
希望这澄清。