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
これにより、最新のエントリの列がすべて更新されます。