John名前が(複数のレコードがありますがIDが異なる)最新のレコードを更新しようとしてJohnいますが、バインドされているようです。クエリの何が問題になっていますか?
UPDATE messages_tbl SET is_unread=1
WHERE ReceiveTime = (SELECT MAX(ReceiveTime) FROM messages_tbl WHERE name='John')
このようなことを行うより良い方法はありますか?
John名前が(複数のレコードがありますがIDが異なる)最新のレコードを更新しようとしてJohnいますが、バインドされているようです。クエリの何が問題になっていますか?
UPDATE messages_tbl SET is_unread=1
WHERE ReceiveTime = (SELECT MAX(ReceiveTime) FROM messages_tbl WHERE name='John')
このようなことを行うより良い方法はありますか?
と を使用してみてORDERくださいLIMIT。
これを試して:
UPDATE messages_tbl SET is_unread = 1
WHERE name = 'John'
ORDER BY ReceiveTime DESC
LIMIT 1
このクエリは、最高 (最新)ReceiveTimeから最低 (最も古い) の順に行を更新しますReceiveTime。と組み合わせて使用すると、LIMIT最新のものだけReceiveTimeが変更されます。
両方を結合して、条件に基づいて更新を実行できます。
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これにより、最新のエントリの列がすべて更新されます。