首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >邮件系统数据库结构,需要帮助

邮件系统数据库结构,需要帮助
EN

Stack Overflow用户
提问于 2010-06-16 17:07:26
回答 1查看 99关注 0票数 0

我有一个系统,在那里用户(发件人)可以给朋友(接收者)写个便条,号码是receivers>=0。消息的文本保存在DB中,发送者和所有接收者都可以看到,然后登录到系统。发送者可以在任何时候增加更多的接收者。更重要的是,任何接收者都可以编辑消息,甚至可以从DB中删除它。对于这个系统,我创建了3个表,很快:

用户(userID,用户名,密码)

消息(messageID,文本)

列表(id,senderID,receiverID,messageID)

在表“列表”中,每一行对应于一对发送方-接收方,如

sender_x_ID -- receiver_1_ID -- message_1_ID

sender_x_ID -- receiver_2_ID -- message_1_ID

sender_x_ID -- receiver_3_ID -- message_1_ID

现在的问题是:

  1. 如果用户从表“消息”中删除消息--如何自动删除表“列表”中与已删除消息对应的所有行。我必须包括一些外键吗?

更重要的是:

  1. 如果发送者已经为他的message1 (username1、username2和username3)提供了3个接收者,并且在特定的时刻决定添加username4和username5,同时将username1排除在接收者列表之外。PHP代码将获得新的接收者列表(username2、username3、username4、username5),这意味着向表中插入“列表”

sender_x_ID -- receiver_4_ID -- message_1_ID

sender_x_ID -- receiver_5_ID -- message_1_ID

并从表“列表”中删除与user1对应的行(该行不再在列表或接收者中)

sender_x_ID -- receiver_1_ID -- message_1_ID

从PHP发送哪个sql查询使其变得简单和智能?请帮帮我!sql查询的示例将是完美的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-06-16 17:29:55

你的第一个问题很简单。您可以通过在list上设置外键来做到这一点。将其设置为CASCADE更新和删除(以便DELETE FROM messages WHERE messageID = 5将自动删除list中的所有行,其中messageID = 5也是如此)。您需要使用InnoDB作为存储引擎才能工作.

对于第二个问题,这也很容易。只需在一个查询中插入新行:

代码语言:javascript
复制
INSERT INTO list (senderID, receiverID, messageID)
VALUES (sender_x_id, receiver_4_id, message_1_id),
       (sender_x_id, receiver_5_id, message_1_id);

然后把其他的移除在另一个:

代码语言:javascript
复制
DELETE FROM list
WHERE receiverID = receiver_1_id
  AND messageID = message_1_id
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3055542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档