Mysql:更新最新记录的字段

时间:2013-03-30 06:59:03

标签: mysql sql sql-update

我正在尝试更新名称为John的最新记录(John有多条记录但ID不同)但我似乎处于绑定状态。我的查询出了什么问题?

UPDATE messages_tbl SET is_unread=1
WHERE ReceiveTime = (SELECT MAX(ReceiveTime) FROM messages_tbl WHERE name='John')

有没有更好的方法来做这样的事情?

2 个答案:

答案 0 :(得分:38)

您可以尝试使用ORDERLIMIT

试试这个:

UPDATE messages_tbl SET is_unread = 1
WHERE name = 'John'
ORDER BY ReceiveTime DESC
LIMIT 1

此查询将按最高(最近)ReceiveTime到最低(最旧)ReceiveTime的顺序更新行。与LIMIT结合使用时,只会更改最新的ReceiveTime

答案 1 :(得分:7)

您可以加入并根据条件执行更新。

UPDATE  messages a
        INNER JOIN
        (
            SELECT  name , MAX(ReceiveTime) max_time
            FROM    messages 
            GROUP   BY name 
        ) b ON  a.name = b.name AND
                a.ReceiveTime = b.max_time
SET     a.is_unread = 1
-- WHERE    a.name = 'John'

没有WHERE条件。它将全部更新列is_unread以获取最新条目。