Mysql: обновить поле самой последней записи

Я пытаюсь обновить последнюю запись, где имя John (John имеет несколько записей, но отличается ID), но я, кажется, привязан. Что случилось с моим запросом?

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

Есть ли лучший способ сделать что-то вроде этого?

Ответ 1

Вы можете присоединиться к обоим и выполнить обновление на основе условия.

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 для последней записи.

Ответ 2

Вы можете попробовать использовать ORDER и LIMIT.

Попробуйте следующее:

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

Этот запрос будет обновлять строки по порядку наивысшего (самого последнего) ReceiveTime до самого низкого (самого старого) ReceiveTime. Используется в сочетании с LIMIT, будет изменен только последний ReceiveTime.

Ответ 3

я получаю неправильный синтаксис возле ЗАКАЗА... почему?