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
я получаю неправильный синтаксис возле ЗАКАЗА... почему?