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

标签 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.id 1的chats表设置start_date等于chat_id 1(在本例中为2015-02-01)和chats.id 3消息中的最早日期chat_id 3 的消息的最早日期(在本例中等于 2013-01-01)?

最佳答案

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

关于mysql - 如何更新发送日期早于聊天开始的聊天消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56408558/

相关文章:

php - 在消息系统php中回复邮件

php - 如何将图片路径和名称上传到数据库 - Codeigniter

java - 在 UTF-8 MySQL 数据库和 BoneCP 中插入日语字符串

Php mysql 查询显示不应该显示的数据

php - 按日期从 2 个表中排序数据

php - 得到像 Tree mysql 这样的结果

java - jOOQ 添加条件 : in SQL question mark appears instead of the value

sql - 您如何在团队中共享 SQL 更改?

mysql - 按记录中的最后一个字母排序列

sql - 分层数据库,多个表或具有父 ID 的列?