检查线程的最后发件人和更新状态

发布于 2025-02-01 21:48:02 字数 596 浏览 3 评论 0原文

我有两个表

消息

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(aka not admin)>我想更新线程状态要打开。

到目前为止,我做了什么,

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)

我做错了什么?

I have two tables

message

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

thread

id status
5.  close
10. Open

What I am trying to achieve is if the latest send_id!=1(aka not admin) > I want to update the thread status to open .

What I did so far

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)

What did I do wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

一杯敬自由 2025-02-08 21:48:03

使用first_value()窗口函数为每个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

Use FIRST_VALUE() window function to get for each thread_id the last 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;

See the demo.

太阳公公是暖光 2025-02-08 21:48:03

我希望这会起作用。

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);

i hope this would work.

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);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文