我只是坚持使用一个简单的 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
我也尝试过子查询,但它也不起作用
需要一些帮助。
谢谢
我只是坚持使用一个简单的 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
我也尝试过子查询,但它也不起作用
需要一些帮助。
谢谢
在 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
您的子查询根据您想要的和返回最大 id user_id
,然后加入inbox
最大 id 以选择您想要的行,然后您可以只更新该行。
您需要像使用反引号一样转义MySQL 中的保留字。read
您还可以使用limit
仅更新最大的记录。
UPDATE inbox
SET `READ` = 0
order by id desc
limit 1