Ранее задавал вопрос как сортировать данные полученные из базы средствами 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
)
Если я правильно понял, то нужно сделать группировку при выборке, с учетом последнего времени отправки:
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 будут браться все остальные нужные вам значение
Продвижение своими сайтами как стратегия роста и независимости