现在的想法是 两张表 一张会话表,一张消息表。发送消息时查看是否有对应的会话,没有就创建一个会话。
dialog
id
user1_id // 保证用户 user1_id > user2_id,这样方便查找两个用户的会话
user2_id
last_time // 上一个消息发送时间
last_message // 消息内容
last_username // 消息发送者
message
id
dialog_id
from_user
to_user
content
created_date
has_read
查看一个用户的所有会话的最近消息
select last_time, last_message, last_username from dialog where user1_id = userId or uesr2_id = userId order by last_time desc;
查看单独一个用户和另外一个用户的消息
select * from message where dialog_id = id;
但是这样做不知道如何设计用户删除会话或者会话中的某一条消息,如果直接删除了之后,另外一个用户的消息记录也没有了
感谢 @lhx2008、@zczy 的建议,现在大致解决方案如下
# message
id
content
from_user
to_user
created_date
# inbox
id
user_id
message_id
dialog_id
# dialog
id
last_time
last_message
last_username
user1_id
user2_id
添加了一张收件表 inbox,发送的时候往 inbox 表插两条记录,一条发送者,一条接受者。这样删除就不会影响了。
查看用户的所有会话的最近消息
select last_username, last_message from inbox where inbox.user_id = userId and inbox.dialog_id = dialog_id.id order by last_time;
查看单个用户和另外一个用户的详细消息
select content, from_user, to_user from inbox, dialog, message where dialog.user1_id = user1Id and dialog.user2Id and dialog.id = inbox.dialog_id and inbox.message_id = message.id order by created_date;
删除一个用户的一条消息
delete from inbox where user_id = userId and message_id = messageId;
删除用户的一个会话
delete from inbox where user_id = userId and dialog_id = dialogId;
1
zpfhbyx 2020-04-10 18:00:54 +08:00
weibo 的推拉机制
|
2
lhx2008 2020-04-10 18:03:43 +08:00 via Android 1
消息是消息,不包含用户。用户再关联上消息,然后设置几个标志位。
|
3
jinsongzhao 2020-04-10 18:04:35 +08:00 via Android
标记为删除状态,不做实际删除
|
4
zczy 2020-04-10 22:22:49 +08:00 1
消息存一份在消息表,再存一份在收件箱,发件箱可以不,这样收件人发件人删除就互不干扰了
两个都删除是消息撤回 |