作者:茗瑜42_330 | 来源:互联网 | 2023-05-28 16:14
我在我的网站上创建了一个简单的消息传递系统,新的注册用户可以相互发送消息.以下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的所有记录.
希望这个解决方案可以帮到你.