如何在消息传递系统中处理删除(回答不足)

mhd8tkvw  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(303)

我的sql表
消息\u id
发件人\u id
接收器id
主题
消息
地位
我创造了一个 mysql 内部消息传递系统的数据库。
在我的数据库结构中,有一个消息表,其中每条消息都有发送方用户标识和接收方用户标识。任何用户的收件箱都可以根据自己的标识关系作为消息表中的接收方标识进行填充。我的问题是,当我试图删除任何消息时,消息都会从发送端和接收端消失。
问题:
因此,是否有其他解决方案,只从执行删除操作的用户中删除消息。
我的i̇nbox my\u id(1):

sender_id (2)--subject--message [Delete button](*deletion is done with message id*)
----------------------------------------

其他用户id(2)发送框:

receiver_id(1)--subject--message
--------------

我在收件箱中列出的邮件的sql代码

$id=$userRow["user_id"];
$stmt = $baglanti->prepare("SELECT * FROM messages WHERE receiver_id=$id ORDER BY message_id DESC  ");
$stmt->execute();

我在前面的问题中找不到答案,它们似乎容易出错,所以我重新打开了这个问题。
---请注意,发送消息的用户太多
我感谢所有用户的努力
我的语言不是英语,所以如果我犯了错误,我很抱歉

vdzxcuhz

vdzxcuhz1#

除了从表中删除消息行之外,还可以将的状态代码字段带入表中
0-否1-发送方删除2-接收方删除

aij0ehis

aij0ehis2#

您可以在表中为“删除状态”再添加两个字段:
已删除\u发件人的\u, default(0) or NULL 已删除\u接收器的\u, default(0) or NULL 当发件人删除邮件时,设置 deleted_for_sender = 1 ,或者当接收者删除消息时,更改状态 deleted_for_receiver = 1 .
现在,当您需要接收方的消息列表时,请尝试以下示例:

$id=$userRow["user_id"];
$stmt = $baglanti->prepare("SELECT * FROM messages WHERE receiver_id=$id AND deleted_for_receiver != 1 ORDER BY message_id DESC  ");
$stmt->execute();
foreach ($stmt as $row) {
// do something with $row
}

发件人的邮件列表如下:

$id=$userRow["user_id"];
$stmt = $baglanti->prepare("SELECT * FROM messages WHERE sender_id=$id AND deleted_for_sender != 1 ORDER BY message_id DESC  ");
$stmt->execute();
foreach ($stmt as $row) {
// do something with $row
}
xfb7svmp

xfb7svmp3#

在您的消息表中添加一个新的状态列(“deleted_by”或您可以设置任何您想说的内容),当有人执行删除操作时,只需更改该状态列的值(0为默认值,1为发件人删除,2为收件人删除,3为两者都删除),而不是删除该行。

相关问题