Я создаю многопоточную систему сообщений, очень похожую на 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
, а затем создает новое сообщение на основе этого.
Кроме того, для просмотра входящих сообщений я могу просто запросить все потоки на основе user_id
.что-то вроде SELECT * FROM thread WHERE to_id = 2 и to_keep = TRUE ORDER BY date DESC
или, если я хочу просматривать сообщения в папке исходящих, это будет что-то вроде SELECT * FROM thread WHERE from_id = 2 и from_keep = TRUE ORDER BY date DESC
.
Если пользователь открывает поток, когда есть новое сообщение, то to_read обновляется до true UPDATE thread SET to_read = TRUE WHERE thread_id = 4
.
Мне кажется, что я слишком усложняю этот процесс и что должен быть лучший способ сделать это.
Любая помощь или идеи приветствуются.
Таким образом, позвольте мне просто выбрать все из таблицы потоков, а затем выполнить соединение с таблицей пользователей, чтобы отобразить все, что мне нужно. Однако я считаю, что должен быть способ сделать это лучше.