@vladislav997

Есть чат. Как вывести список диалогов с последним полученным или отправленным сообщением?

Подскажите, есть чат. Как вывести список диалогов с последним полученным или отправленным сообщением? Структура базы такая:
5ea00300e5f61237566331.png
Принцип такой: бот шлёт сообщение пользователю и наоборот.

Пробовал так, но это не верное решение:
$viewLastMsg = R::findAll('chats', 'ORDER BY id DESC LIMIT 1');

foreach ($viewLastMsg as $vLM)
{
    if(
        ($vLM->sender_type == 'user' && $vLM->sender_id == $_SESSION['logged_user']->id && $vLM->recipient_id == $bot->id)
        ||
        ($vLM->sender_type == 'bot'  && $vLM->sender_id == $bot->id && $vLM->recipient_id == $_SESSION['logged_user']->id)
    )
    {
        echo $vLM->message;
    }
}

Подскажите решение, может как правильно сделать выборку или подтолкните на верный путь..
  • Вопрос задан
  • 142 просмотра
Решения вопроса 1
@MaximaXXl
Так как Вы не указали базу данных, вот Вам решение, но оконные функции поддерживают не все =)
select distinct 
first_value(message) over (partition by LEAST(sender_id, recipient_id),GREATEST(sender_id, recipient_id)
                                   order by id desc)
from table


Если оконные функции не поддерживает, то будет выглядеть так
select message
 from table
 where id in (select max(id) from table group by LEAST(sender_id, recipient_id),GREATEST(sender_id, recipient_id))

Ну или можно через join переписать, но мне лень, думаю осилите ;-)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы