首页 > 解决方案 > 如何更新发送日期早于聊天开始的聊天消息?

问题描述

我有两个表:1.聊天(包含聊天的开始日期),2.消息(包含聊天消息的发送日期)。

聊天:

id, start_date
1, 2015-06-01
2, 2014-06-01
3, 2013-06-01

留言:

id, message, sent_on, chat_id
1,  messag1,  2015-05-01, 1
2,  messag2,  2015-04-01, 1
3,  messag3,  2015-03-01, 1
4,  messag4,  2015-02-01, 1

5,  messag5,  2014-06-01, 2
6,  messag6,  2014-06-01, 2
7,  messag7,  2014-06-01, 2
8,  messag8,  2014-06-01, 2

9,  messag9,  2013-04-01, 3
10, messag10, 2013-03-01, 3
11, messag11, 2013-02-01, 3
12, messag12, 2013-01-01, 3

问题是来自 chat_id = 1 和 3 的消息的记录的sent_on日期早于 chats.id 等于 1 和 chats.id 等于 3。

我们如何更新chats.id 1 的chats表设置start_date 等于来自chat_id 1(在本例中为2015-02-01)的消息的最早日期和chats.id 3 与来自chat_id 3 的消息的最早日期(等于这个案例2013-01-01)?

标签: mysqlsql

解决方案


我们可以尝试对子查询进行更新连接,以查找messages表中每个聊天的最早日期:

UPDATE chats c
INNER JOIN
(
    SELECT chat_id, MIN(sent_on) AS min_sent_on
    FROM messages
    GROUP BY chat_id
) m
    ON c.id = m.chat_id
SET
    c.start_date = m.min_sent_on;

推荐阅读