Я создаю многопоточную систему сообщений, подобную gmail и facebook, где в папке "Входящие" отображаются самые последние потоки, отображающие тему, имя отправителя и отметку времени последнего сообщения.
Здесь Как мои таблицы настроены:
users:
user_id
user_name
thread:
thread_id
title
to_id
to_keep
to_read
from_id
from_keep
date
message:
message_id
thread_id
to_id
from_id
message_text
date
То, что я делаю прямо сейчас, - это когда пользователь создает новое сообщение, он создает новый поток в таблице потоков, а затем новое сообщение в таблице сообщений, и если пользователь отвечает на поток, он дублирует текущий нить в таблице потоков, за исключением того, что он меняет местами to_id
и from_id
, а затем создает новое сообщение на основе этого.
Кроме того, для представления inbox я могу просто запросить все потоки на основе user_id
. так что что-то вроде SELECT * FROM thread WHERE to_id = 2 and to_keep = TRUE ORDER BY date DESC
, или если я хочу просматривать сообщения в outbox, это будет что-то вроде SELECT * FROM thread WHERE from_id = 2 and from_keep = TRUE ORDER BY date DESC
.
Если пользователь открывает поток при появлении нового сообщения, то to_read обновляется до true UPDATE thread SET to_read = TRUE WHERE thread_id = 4
.
Мне кажется, что я слишком усложняю этот процесс и что должен быть лучший способ сделать это.
Любая помощь или идеи будут оценены.
Этот способ позволяет мне просто выбрать все из таблицы потоков, а затем выполнить соединение с таблицей пользователей, чтобы отобразить все, что мне нужно. Однако я чувствую, что должен быть лучший способ сделать это.