我有一个系统,用户(发送者)可以给朋友(接收者)写一个音符,接收者数量> = 0。消息文本保存在数据库中,发送者和所有接收者都可以看到,然后他们登录到系统。发件人可以随时添加更多接收器。任何接收器的更多内容都可以编辑消息,甚至可以从DB中删除它。对于这个系统,我很快创建了3个表:
表“列表”中的用户(userID,用户名,密码)
消息(messageID,文本)
list(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.如果用户从表“messages”中删除消息,如何自动删除表“list”中对应于已删除消息的所有行。我必须包含一些外键吗?
更重要的是:
2.如果发件人已经为他的message1(username1,username2和username3)说了3个接收者,并且在某个时刻决定添加username4和username5,同时从接收者列表中排除username1。 PHP代码将获得新的接收者列表(username2,username3,username4,username5)这意味着插入表“list”
sender_x_ID - receiver_4_ID - message_1_ID
sender_x_ID - receiver_5_ID - message_1_ID
并从表“list”中删除与user1对应的行(不再在列表或接收者中)
sender_x_ID - receiver_1_ID - message_1_ID
从PHP发送哪个sql查询使其以简单明了的方式进行?请帮忙! SQL查询的例子很完美!
答案 0 :(得分:2)
你的第一个问题很简单。您可以通过在list
上设置外键来完成此操作。您将其设置为CASCADE
更新和删除(以便DELETE FROM messages WHERE messageID = 5
自动删除list
中 messageID = 5 的所有行。您' d需要使用InnoDB
作为存储引擎才能实现...
对于第二个问题,这也很容易。只需在一个查询中插入新行:
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);
然后删除另一个中的其他人:
DELETE FROM list
WHERE receiverID = receiver_1_id
AND messageID = message_1_id