Как составить SQL запрос вывода диалогов?

119
19 марта 2021, 20:20

Ранее задавал вопрос как сортировать данные полученные из базы средствами PHP, посоветовали что лучше составить запрос на SQL.

Имеется таблица:

Нужно составить из списка сообщений - диалоги (например как в любом мессенджере, вывод только последнего сообщения от отправителя).

Получаю массив из PHP

[0] => Array
(
    [sender_id] => 1
    [text] => как длеа
    [date] => 1562313697
)
[1] => Array
(
    [sender_id] => 3
    [text] => тест
    [date] => 1562313674
)
[2] => Array
(
    [sender_id] => 1
    [text] => Привет
    [date] => 1562313477
)
[3] => Array
(
    [sender_id] => 2
    [text] => хай
    [date] => 1562114203
)
[4] => Array
(
    [sender_id] => 3
    [text] => 12345
    [date] => 1562113713
)
[5] => Array
(
    [sender_id] => 2
    [text] => zzz
    [date] => 1562112784
)

на выходе должно быть:

[0] => Array
(
    [sender_id] => 1
    [text] => как длеа
    [date] => 1562313697
)
[1] => Array
(
    [sender_id] => 3
    [text] => тест
    [date] => 1562313674
)
[2] => Array
(
    [sender_id] => 2
    [text] => хай
    [date] => 1562114203
)
Answer 1

Если я правильно понял, то нужно сделать группировку при выборке, с учетом последнего времени отправки:

    SELECT * FROM your_table as main_table 
    INNER JOIN (SELECT sender_id ,max(id) as last_message_id FROM your_table GROUP BY sender_id ) as sub_table
    ON sub_table.last_message_id = main_table.id
    ORDER BY date DESC

Таким образом в sub_table будут содержаться все последние сообщения для каждого отправителя, и из main_table будут браться все остальные нужные вам значение

READ ALSO
Белый экран на странице phpinfo(). Битрикс

Белый экран на странице phpinfo(). Битрикс

В админке Битрикса при переходе Настройки-Инструменты-Диагностика-Настройки PHP (/bitrix/admin/phpinfophp) выдаёт пустую страницу

115
Нужна помощь по работе с массивами

Нужна помощь по работе с массивами

Всем приветЯ новичок в PHP

109
Closure function argument

Closure function argument

У меня есть метод класса, который обновляет ценовые предложения товара:

97
Многомерный масив по значению ключа

Многомерный масив по значению ключа

Как можно записать цену в переменную по значению ключа, например BTC, ETH, LTC смскрин: https://dl

97