Группировать сообщения по времени отправки - PullRequest
0 голосов
/ 23 марта 2019

Я разрабатываю систему сообщений между двумя пользователями и хочу сгруппировать их по времени отправки, показывая ее только один раз.

В настоящее время я показываю сообщения и время отправки каждого из них., но я хочу показать только последнее сообщение, группирующее их в разговоре (как это происходит с прямыми сообщениями в Twitter).

SELECT id, author, datetime, text FROM messages WHERE author = 'A' AND receiver = 'B'

Что у меня есть (id / author /datetime / text):

1 / A / 22/03/2019 22:15 / This is message 1
--------------------------------------------
2 / A / 22/03/2019 22:16 / This is message 2
--------------------------------------------
3 / B / 22/03/2019 22:16 / This is message 3
--------------------------------------------
4 / A / 22/03/2019 22:16 / This is message 4
--------------------------------------------
5 / A / 22/03/2019 22:16 / This is message 5
--------------------------------------------
6 / A / 22/03/2019 22:18 / This is message 6
--------------------------------------------
7 / B / 22/03/2019 22:19 / This is message 7

Что я хочу (id / author / datetime / text):

1 / A / 22/03/2019 22:15 / This is message 1
--------------------------------------------
2 / A / 22/03/2019 22:16 / This is message 2
--------------------------------------------
3 / B / 22/03/2019 22:16 / This is message 3
--------------------------------------------
4 / A / 22/03/2019 22:16 / This is message 4
5 / A / 22/03/2019 22:16 / This is message 5
--------------------------------------------
6 / A / 22/03/2019 22:18 / This is message 6
--------------------------------------------
7 / B / 22/03/2019 22:19 / This is message 7

Сообщения 4 и 5 сгруппированы, поскольку они принадлежат одному пользователюи были отправлены в одну и ту же минуту.

Я бы хотел сгруппировать сообщения по дням, когда текущая дата не совпадает с датой отправки сообщений.Другими словами, сообщения, которые не были отправлены в текущую дату, будут сгруппированы вместе.В этом случае пользователь сообщения не будет принят во внимание, и все будут сгруппированы только по дате.

1 Ответ

0 голосов
/ 23 марта 2019

Вам не нужно ничего менять в своем запросе, чтобы получить этот результат, вы можете просто изменить способ извлечения строк.

Используйте значения автора и datetime, чтобы создать составной ключ для разделения ваших сообщенийна группы.Вы также можете получить часть даты datetime, чтобы разделить группы сообщений на дни.

while ($row = $query->fetch_assoc()) {

    // get the date
    $date = substr($row['datetime'], 0, 10);

    // create the composite key
    $key = "$row[author]$row[datetime]";

    // group the messages
    $message_groups[$date][$key][] = $row;
}

Я бы также рекомендовал указать ORDER BY для вашего запроса, вероятно, ORDER BY id.MySQL не обязательно автоматически возвращает их в том порядке, в котором они были вставлены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...