我正在创建一个类似于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 and to_keep = TRUE ORDER BY date DESC
这样的语句查询所有与该用户有关的线程;如果要查看发件箱中的消息,则可以使用类似于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
。
我觉得我可能过于复杂化了这个过程,应该有更好的方法来实现。如果有任何帮助或想法,都会被欢迎。
这种方式使我只需从线程表中选择所有内容,然后与用户表进行连接以显示所需的所有内容。但是,我觉得可能有更好的方法来做到这一点。