我已经创建了一个使用PHP和mySQL的私人消息系统,其通知有点像Facebook。
数据库表包含以下字段(并非全部列出):
所有回复都存储在第二个表中,因为每条消息都会创建一个帖子。第二个表看起来有点像这样:
当向用户发送新消息时,我将消息的“状态”更改为未读,从此可以运行计数查询以列出通知中的所有未读消息。
但是,如果用户回复该消息,则无法将原始“状态”字段设置为未读,因为这将显示在两个用户通知上。所以我创建了另一个名为'RepliedStatus'的字段,但我不确定如何使用它来显示消息回复的通知?
谢谢你们。答案 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以获取重复删除和通知数据,如
然后是改变状态或删除声明的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等方式对其进行处理。 ..