我的SQL表
- message_id
- sender_id
- receiver_id
- 主题
- 消息
- 状态
我为内部邮件系统创建了一个mysql
数据库。
在我的数据库结构中,有一个消息表,其中每个消息都有发送者user_id和接收者user_id。任何用户的收件箱都可以根据其自身的id关系填充为message表中的receive_id。 我的问题是,当我尝试删除任何邮件时,最终发送者和接收者中的邮件都消失了。
问题:
还有其他替代解决方案,其中仅从执行删除操作的用户中删除邮件。
我的İnboxmy_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();
我以前的问题一直找不到答案,它们似乎容易出错,所以我重新打开了这个问题。
---请注意,正在发送消息的用户过多
我感谢所有用户的努力
我的语言不是英语,所以很抱歉如果我输入错误
答案 0 :(得分:0)
在消息表中添加一个新的状态列(“ deleted_by”,或者您可以设置要说的内容),并且当某人执行删除操作时,只需更改值(0为默认值,如果由发件人删除则为1,如果为2而不是删除该行,而被该状态列的接收者删除,如果被两个都删除,则删除3。
答案 1 :(得分:0)
代替从表中删除消息行,您还可以将状态码字段输入表中
0-否 1个由发件人删除 2被收件人删除
答案 2 :(得分:0)
您可以在表中再添加两个字段以获取删除状态:
default(0) or NULL
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
}