Получить разговоры с последним mesaage, узел js, сокет io, MySQL приложение чата - PullRequest
0 голосов
/ 04 октября 2018

Я относительно новичок в создании приложения чата.Ionic, узел js, сокет io, стек mysql используется для построения приложения чата как для индивидуального, так и для группового чата.Таблицы в соответствующей схеме БД показаны ниже

enter image description here

enter image description here

enter image description here

enter image description here

Диалог и его идентификатор рассматриваются как нить в этом дизайне.

Когда новое сообщениевставляется отправителем в группу: таблица 'messenger_threads' заполняется новым идентификатором потока (идентификатором группы, если это групповое сообщение) и темой, если эта запись идентификатора группы является новой, иначе ничего не вставляется.Когда новое сообщение вставляется отправителем в приватном чате: ID потока генерируется с соответствующей парой отправитель-получатель со стороны клиента.Таблица messenger_threads заполняется сгенерированным идентификатором потока.Если разговор с той же парой получателя отправителя находится в таблице, вставка не производится.

Аналогично, участники в групповом и личном чате для одного и того же thread_id (идентификатора сохранения) заполняются в таблице 'messenger_participants'

В таблице 'messenger_messages' новые сообщения вставляются с идентификатором thread_id, телом сообщения и идентификатором отправителя (который является идентификатором user_id в таблице). Таким образом, в отдельном разговоре / потоке (групповом или личном чате) вседоступны сообщения и сведения об отправителе.

В таблице 'user_messages' обновляется идентификатор сообщения и сведения о связанных пользователях (как отправителя, так и получателя), так что действие по очистке сообщения для каждого пользователя может быть обновлено.

Данные идентификатора пользователя извлекаются из таблицы 'users' table

Users Атрибуты 1.id 2. имя пользователя 3.other_details ..

ВозможноПожалуйста, помогите мне в запросе для получения всех разговоров одного пользователя с последним сообщением, которое яИнформация, как Facebook Messenger. Также дайте мне предложения в дизайне БД.

1 Ответ

0 голосов
/ 04 октября 2018
select mthread.subject subject,message.last_message 
from messenger_threads mthread,
    (select mm.thread_id thread_id,mm.body last_message,max(mm.updated_at) max_date 
            from messenger_messages mm 
                group by mm.thread_id) message
where mthread.id in 
    (select thread_id from messenger_participants mpart where user_id in(?)) 
    and message.thread_id=mthread.id 
order by mthread.updated_at desc;

Этот запрос должен удовлетворять вашим нужным целям, при условии, что к нему можно применить настройку производительности для дальнейшего улучшения.Предложения по улучшению этого запроса приветствуются.

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