私人消息通知 - 数据库表设计

时间:2012-01-07 14:34:10

标签: php mysql database-design notifications private-messaging

我已经创建了一个使用PHP和mySQL的私人消息系统,其通知有点像Facebook。

数据库表包含以下字段(并非全部列出):

  • 的MessageID
  • senderUserID
  • RecUserID
  • 消息
  • 主题
  • DateTime
  • 状态 - 是否读取
  • RepliedStatus - 我应该如何使用它?
  • DeleteRec - 从收件箱中删除
  • DelSender - 删除发件人收件箱
  • RepliedUserId - 当用户回复原始邮件时,这会更改为收件人的ID

所有回复都存储在第二个表中,因为每条消息都会创建一个帖子。第二个表看起来有点像这样:

  • messageID - FK
  • repuserID
  • Mesage
  • 日期时间

当向用户发送新消息时,我将消息的“状态”更改为未读,从此可以运行计数查询以列出通知中的所有未读消息。

但是,如果用户回复该消息,则无法将原始“状态”字段设置为未读,因为这将显示在两个用户通知上。所以我创建了另一个名为'RepliedStatus'的字段,但我不确定如何使用它来显示消息回复的通知?

谢谢你们。

3 个答案:

答案 0 :(得分:2)

如果您有回复表,那么您的第一个状态不需要回复状态列。由于回复表中存在记录,您知道用户已回复消息

答案 1 :(得分:0)

为什么不将INT和可空列添加到名为“previous_message”的第一个表(比方说,“messages”表)?

ALTER TABLE messages ADD COLUMN previous_message INT DEFAULT NULL;

因此,每条消息都会在同一个表格中与前一条消息相同,您可以计算出序列。如果它有帮助,您可以拥有一个具有相同定义的“next_message”列,并在回复时更新相关记录。

这样做可以在每次回复时使用状态栏。

如果你想保留相同的数据库组织,我建议在第二个表上添加一个列状态(让我们说“回复”)。

希望这有帮助

答案 2 :(得分:0)

我将把删除的列放一次,读取或读取的内容相同:

[{"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";

当发件人“删除”时,如果删除colomn为2,则数据库中所有胎面相关ID都会更改为1或0 ...

但我认为最好创建另一个colomn以获取重复删除和通知数据,如

  • 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涉及colomn删除所有的步骤都没有出现但是如果是发件人将删除0时接收者的id可以归因于这样两个成员都可以“删除”该消息。通知也一样!

很久以后,一个cron-job可以删除非常旧的消息read(0)......

PS:这可能是通知系统,就像通知墙上的新帖子或评论照片或日历上的新事件...只需在列数据中添加更多信息,并使用php或java-ajaxed等方式对其进行处理。 ..