Как обновить сообщения из чата, отправка которого произошла раньше даты начала чата? - PullRequest
0 голосов
/ 01 июня 2019

У меня есть две таблицы: 1. чаты (содержащие дату начала чата), 2. сообщения (содержащие дату отправленного сообщения чата).

чаты:

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

messages:

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 start_date для chats.id 1, равную самой ранней дате из сообщений с chat_id 1 (в данном случае 2015-02-01) и chats.id 3 с самой ранней датой из сообщений сchat_id 3 (в данном случае равняется 2013-01-01)?

1 Ответ

1 голос
/ 01 июня 2019

Мы можем попробовать выполнить обновление, присоединиться к подзапросу, который находит самую раннюю дату для каждого чата в таблице 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...