私信通知 - 数据库表设计
Posted
技术标签:
【中文标题】私信通知 - 数据库表设计【英文标题】:Private Messaging Notification - Database Table Design 【发布时间】:2012-02-04 22:13:26 【问题描述】:我已经创建了一个使用 php 和 mysql 的私人消息传递系统,其通知有点像 Facebook。
数据库表有以下字段(未全部列出):
消息ID 发件人用户ID RecUserID 留言 主题 日期时间 状态 - 是否已读 RepliedStatus - 我应该如何使用它? DeleteRec - 从收件箱中删除 DelSender - 删除发件人收件箱 RepliedUserId - 当用户回复原始消息时,这是对接收者 ID 的更改所有回复都存储在第二个表中,因为每条消息都会创建一个线程。第二个表看起来有点像这样:
messageID - FK repuserID 消息 日期时间在向用户发送新消息时,我将消息的“状态”更改为未读,由此可以运行计数查询以在通知中列出所有未读消息。
但如果用户回复该消息,我无法将原始“状态”字段设置为未读,因为这将出现在两个用户的通知中。所以我创建了另一个名为“RepliedStatus”的字段,但我不确定如何使用它来显示消息回复通知?
谢谢大家。
【问题讨论】:
【参考方案1】:如果您有回复表,那么您的第一个状态不需要回复状态列。由于回复表中存在一条记录,您就知道用户已经回复了一条消息
【讨论】:
aah 回复表中的状态存在一个问题,两个(发送者/接收者)用户都会收到通知,因为回复就像主消息的线程,有点像脸书。示例:用户 A 向用户 B 发送消息,用户 B 回复该消息,而不是用户 A 回复同一消息,等等所有这些都在同一消息中。【参考方案2】:为什么不向名为“previous_message”的第一个表(比如说“messages”表)添加一个 INT 和可为空的列?
ALTER TABLE messages ADD COLUMN previous_message INT DEFAULT NULL;
因此,每条消息都将在同一张表中包含前一条消息,您可以计算出顺序。如果有帮助,您可以拥有一个具有相同定义的“next_message”列,并在回复时更新相关记录。
这样做您可以在每个回复中使用状态列。
如果您想保持相同的数据库组织,我建议在第二个表上添加一个列状态(比如说“回复”)。
希望对你有帮助
【讨论】:
【参考方案3】:我将删除的列放一次,对于已读或未读的内容相同:
["0":"both", "1":"Sender", "2":"receiver"];
然后获取胎面消息,例如:
$sql = "SELECT * FROM messagetreads
WHERE (senderID OR receiverID = ".$_SESSION['MyCurrentId'].")
AND deleted !== 0
ORDER by TreadID AND DateTime ASC";
当发送方“delete”为tread时...如果delete colomn为2,则数据库中所有treadrelatedID都更改为1或0...
但我认为最好创建另一个列来获取重复的删除和通知数据,例如
TreadID (FK_message_Table) 删除(0=已删除 UserID=不显示给此发件人或收件人) 通知(0=都读取 UserID=读取给这个发送者或接收者)然后就是改变状态或者删除语句的ezee。
SELECT 会是这样的:
$SQL = "SELECT *
FROM messagetreads
WHERE (senderID OR receiverID = ".$_SESSION['MyCurrentId'].")
IN (SELECT TreadID WHERE delete !== (0 OR ".$_SESSION['MyCurrentId']."))";
如果是我们的成员ID,则在列中删除所有不出现的消息,但如果是发送者将删除时接收者的ID,则可以归因于0,以便两个成员都可以“删除”消息。通知也一样!
很久以后,一个 cron-job 可以删除非常旧的消息 read(0)...
PS:这也可以是通知系统,例如通知墙上的新帖子或评论照片或日历上的新事件......只需在列数据中添加更多信息并使用 php 或 java-ajaxed 等方式对其进行格式化。 ..
【讨论】:
[queue]:phpmaster.com/zend-queue 我发现有趣的通知方式是存储消息的时间戳和成员对 message_tread 的访问,并在类似的并行过程中进行比较zend-queue doe's ([zend-queue on PHP-MASTER][queue]phpmaster.com/zend-queue/).Also 我将参与者与另一个表中的踏板分开,因为我只想能够将成员添加到消息踏板中(就像 Facebook. ..) 并且所有行都包含上次访问的时间戳、user_id、message_Tread_id以上是关于私信通知 - 数据库表设计的主要内容,如果未能解决你的问题,请参考以下文章