`Всем привет! Подскажите пожалуйста. Для удобства хочу реализовать ЛС на своем сайте в виде диалогов с возможностью добавления собеседников. В данный момент спроектировал так:
messages: id, dialog_id, user_id, content, date dialogs: id, title, dates dialog_file (для прикреплений файлов): id, dialog_id, file_id, date user_dialog: id, user_id, dialog_id, unread, status, date
Алгоритм такой. Изначально, новое сообщение юзер пишет в модальном окне пользователю. На бэке создаю новый dialog, делаю 1 инсерт в messages и делаю 2 инсерта в user_dialog(1 для отправителя, 2-й для получателя). Все записывается, вроде все гуд. Но тут столкнулся с проблемой такой. В ЛС выводится список диалогов. Диалог вывести не составит труда, а вот как вывести отправителя?
P.S. Быть может как-то по-другому спроектировать? Подскажите пожалуйста.
unread относится ко всеми диалогу? А если юзер прочитал весь диалог, а потом туда добавилось новое сообщение?
Получается когда юзер написал сообщение то делается 2 инсерта: 1-й для отправителя с unread: 0, а второй для получателя, с unread: 1. По мере поступления, unread получателя увеличивается. А при открытии диалога - ресетится на 0.
Добавленный собеседник должен видеть весь диалог, в том числе и сообщения, написанные до добавления собеседника в диалог?
ага)
Отправителя чего: первого сообщения, последнего, первого непрочитанного и т.д.?
Если в диалоге например 2 юзера, то вывести отправителя. Если 3 и более, то там я уже просто выведу Андрей, Иван, Оля и еще 10 например. А выводить да. Последнее сообщение в диалоге
А. unread - это КОЛИЧЕСТВО непрочитанных. Тогда лучше n_unread
Если в диалоге например 2 юзера, то выводить то вывести отправителя.
Всегда ли отправителя? Если он сам отправитель, то надо получателя.
В общем случае - всех участников диалога, кроме его самого. Тогда придется делать отдельный запрос
select distinct user_id from user_dialog whrere dialog_id=...
Boris Korobkov: Такой вопрос. Самый важный пожалуй. А как мне проверить, есть ли уже открытый диалог с созданным юзером согласно спроектированным таблицам?