SQL更新WHERE xx和最近的记录

时间:2013-01-24 16:16:11

标签: mysql sql

我需要做一些看似非常简单的事情:

$bdd->query('UPDATE mytable SET aaa = \''.$aaa.'\', bbb = \''.$bbb.'\' WHERE name = \''.$name.'\'');

我的问题:我有多条匹配此“WHERE”的记录,我想只更新最新的记录(我有一个日期和一个可用于定义哪条记录最新的ID)

如何更改我的WHERE以添加“ AND id = the_highest_id_of_this_query ”之类的内容?

2 个答案:

答案 0 :(得分:21)

您可以limitupdate仅限最近的记录

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行。

  • 如果内部条件获取比外部条件更窄的结果集,则最终可能会错过任何较新的记录,而不是内部集合的一部分,但作为外部条件的一部分已满足。

希望这澄清。