热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

phpmysql中的消息系统

如何解决《phpmysql中的消息系统》经验,为你挑选了2个好方法。

我在我的网站上创建了一个简单的消息传递系统,新的注册用户可以相互发送消息.以下mysql声明在我的网站上运行良好,但 我的问题是 -UserA发送消息时UserB,消息显示UserB在他的收件箱中,并且消息显示UserA在他的发件箱中,现在如果由于某些原因UserB从他的收件箱中删除了消息,然后从双方删除邮件,我将所有邮件存储在1个表中,现在我想要实现的是当邮件从收件箱中删除时它应该仍然保留在发件箱中,任何帮助都非常感谢!谢谢!

表结构如下

id   message    sentby   sentto    created

Inbox.php

$you=$_COOKIE['username'];     
$st= "SELECT* FROM mbox WHERE sentto='$you' ORDER BY ID DESC LIMIT 10";

outbox.php

$you=$_COOKIE['username'];
$st= "SELECT*FROM mbox WHERE sentby='$you' ORDER BY ID DESC LIMIT 10";

Josh.. 29

我认为您可以保留当前的消息内容表结构.而不是添加单独的列或删除标志,你最好有一个单独的邮箱表.

那么你当前的mbox表:

id   message    sentby   sentto    created

然后是user_mailboxes的另一个表

id   user    mailbox    message_id

在为user_mailboxes表中的每个用户编写消息时,您必须为消息表执行三次总计插入操作.

所以你的mbox数据看起来像这样:

id   message     sentby    sentto    created 
1    Hi There    UserA     UserB     2015-01-26
2    Hello Back  UserB     UserA     2015-01-26

user_mailboxes数据如下所示:

id   user        mailbox   message_id
1    UserA       Out       1
2    UserB       In        1
3    UserB       Out       2
4    UserA       In        2

这允许您删除user_mailboxes表的各个行.通过允许您同时向多个用户发送消息(每个用户为一个新行),这也允许将来的附加组件,并允许您根据需要添加多个邮箱(In,Out,Trash,Important等).

要查找特定邮箱的用户邮件,您只需使用联接

SELECT * FROM user_mailboxes LEFT JOIN mbox ON mbox.id = user_mailboxes.message_id WHERE user_mailboxes.user = "$user" AND user_mailboxes.mailbox = "Out";

删除时需要清理脚本以确保user_mailboxes表中不存在孤立的邮件.



1> Josh..:

我认为您可以保留当前的消息内容表结构.而不是添加单独的列或删除标志,你最好有一个单独的邮箱表.

那么你当前的mbox表:

id   message    sentby   sentto    created

然后是user_mailboxes的另一个表

id   user    mailbox    message_id

在为user_mailboxes表中的每个用户编写消息时,您必须为消息表执行三次总计插入操作.

所以你的mbox数据看起来像这样:

id   message     sentby    sentto    created 
1    Hi There    UserA     UserB     2015-01-26
2    Hello Back  UserB     UserA     2015-01-26

user_mailboxes数据如下所示:

id   user        mailbox   message_id
1    UserA       Out       1
2    UserB       In        1
3    UserB       Out       2
4    UserA       In        2

这允许您删除user_mailboxes表的各个行.通过允许您同时向多个用户发送消息(每个用户为一个新行),这也允许将来的附加组件,并允许您根据需要添加多个邮箱(In,Out,Trash,Important等).

要查找特定邮箱的用户邮件,您只需使用联接

SELECT * FROM user_mailboxes LEFT JOIN mbox ON mbox.id = user_mailboxes.message_id WHERE user_mailboxes.user = "$user" AND user_mailboxes.mailbox = "Out";

删除时需要清理脚本以确保user_mailboxes表中不存在孤立的邮件.


您忘记提及在user_mailboxes.message_id和mbox.id之间添加外键引用是必需的.

2> 小智..:

只需要做一件事就是在现有表中添加两个新字段

    is_sender_deleted

    is_receiver_deleted

如果有人从发件箱中删除它,则将is_sender_deleted值设为1.因此,当您在发件箱中显示数据时,您只需列出所有具有is_sender_deleted字段值0的记录.

同样的情况如果某人将其从收件箱中删除,则生成is_receiver_deleted值1.因此,当在收件箱中显示数据时,您只需列出其is_receiver_deleted值为0的所有记录.

希望这个解决方案可以帮到你.


推荐阅读
author-avatar
茗瑜42_330
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有