检查线程的最后发送者和更新状态

Checking last sender of a thread and update status

我有两张桌子

留言

id ,thread_id ,sender_id ,message_content
1.   10.         2.          message_content_1
2.    5.          1          message_content_2

线程

id status
5.  close
10. Open

我想要实现的是,如果最新的 send_id!=1(又名不是管理员)> 我想更新线程状态以打开。

到目前为止我做了什么

UPDATE thread
SET thread.status=open
RIGHT JOIN message
ON thread.id=message.thread_id 
WHERE message.senderId!=1 AND (SELECT max(message.id) FROM message WHERE message.thread_id=thread.id)

我做错了什么?

我希望这会奏效。

update thread join message on thread.id=message.thread_id set thread.status='open' where message.sender_id!=1 and (SELECT max(message.id) FROM message);

使用 FIRST_VALUE() window 函数为每个 thread_id 获取最后一个 sender_id:

UPDATE thread t
INNER JOIN (
  SELECT DISTINCT thread_id, 
         FIRST_VALUE(sender_id) OVER (PARTITION BY thread_id ORDER BY id DESC) sender_id
  FROM message
) m ON m.thread_id = t.id
SET t.status = 'open'
WHERE m.sender_id <> 1;

参见demo