2

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

数据库表有以下字段(未全部列出):

  • 消息ID
  • 发件人用户ID
  • 记录用户 ID
  • 信息
  • 主题
  • 约会时间
  • 状态 - 是否已读
  • RepliedStatus - 我应该如何使用它?
  • DeleteRec - 从收件箱中删除
  • DelSender - 删除发件人收件箱
  • RepliedUserId - 当用户回复原始消息时,这是对接收者 ID 的更改

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

  • 消息 ID - FK
  • 用户ID
  • 留言
  • 约会时间

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

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

多谢你们。

4

3 回答 3

2

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

于 2012-01-07T14:42:51.897 回答
0

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

ALTER TABLE messages ADD COLUMN previous_message INT DEFAULT NULL;

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

这样做您可以使用每个回复的状态栏。

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

希望这可以帮助

于 2012-01-07T14:45:31.817 回答
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";

当发件人“删除”是踏面时...如果删除列为 2,则数据库中的所有踏面相关 ID 更改为 1 或 0...

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

  • TreadID (FK_message_Table)
  • 删除(0=删除的用户 ID=不显示给这个发送者或接收者)
  • 通知(0=都读取用户ID=读取给这个发送者或接收者)

然后是 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 等方式对其进行格式化......

于 2012-01-07T19:09:35.737 回答