如何从发送日期早于聊天开始的聊天中更新消息?

时间:2019-06-01 16:37:28

标签: mysql sql

我有两个表: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表设置的chats.id 1的起始日期等于最早日期的chatsid 1(在本例中为2015-02-01)和chats.id 3的日期最早的日期来自带有chat_id 3的消息(在这种情况下等于2013-01-01)?

1 个答案:

答案 0 :(得分:1)

我们可以尝试对子查询进行更新联接,该子查询可以在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;