我只是坚持使用一个简单的mysql查询,我想更新具有表的最大ID的行,而我正在尝试类似但不起作用的行
UPDATE inbox i
INNER JOIN messages m ON i.message_id = m.id
SET i.read = 0
WHERE m.conversation_id = 10
AND i.user_id = 1
ORDER BY i.id DESC
LIMIT 1
我也尝试过子查询,但它不起作用
需要一些帮助。
由于
答案 0 :(得分:2)
在MySql中,如果您有一个引用同一个表的子查询,则无法更新表,但您可以使用JOINS来保留子查询。我会这样做,这是一个技巧,但它有效:
UPDATE
inbox inner join (select max(id) as maxid from inbox) mx on inbox.id = mx.maxid
SET inbox.`read` = 0
编辑:我看到你编辑了你的问题,所以我必须编辑我的答案:
UPDATE
inbox
INNER JOIN (select max(inbox.id) as maxid
from
inbox inner join messages
on inbox.message_id = messages.id
where
messages.conversation_id=10
and inbox.user_id=1) mx
on inbox.id = mx.maxid
SET inbox.`read` = 0
您的子查询根据您想要的conversation_id
和user_id
返回最大ID,然后您加入inbox
最大ID以选择您想要的行,您可以然后只更新那一行。
答案 1 :(得分:1)
你需要像read
一样使用反引号来转义reserved words in MySQL。您还可以使用limit
更新最佳记录。
UPDATE inbox
SET `READ` = 0
order by id desc
limit 1