2012-04-26 57 views
0

我一直在想如何从数据库的多个表中删除数据。为了给出一些背景知识,有一个用户表保存基本信息,如姓名和姓氏。然后有一个登录表,其中包含密码和用户名。我正在创建一个管理页面,允许我通过两个表中的信息查看用户列表。这部分工作正常。我的问题是试图创建一个删除脚本。 我试过做单独的查询,但我没有得到任何地方。有人能给我一些指导吗?或者至少在某个地方我可以具体阅读这些内容?删除数据库中多个表的数据

// Get IDs 
$lid = $_POST['lid']; 
$uid = $_POST['uid']; 

// Delete the product from the database 
require_once('database.php'); 

$query = "DELETE user,login FROM user INNER JOIN login ON user.uid = '$uid' AND login.lid= '$lid'"; 
$db->exec($query); 
+0

你不能在DELETE中这样连接。只需使用两个DELETE语句。 – Wyzard 2012-04-26 23:44:30

+0

使用级联的外键,因此当您删除用户时,该用户的所有相关数据也会自动删除。 – Esailija 2012-04-26 23:46:15

+0

请记住,您不必进行硬删除。您可以在表格中包含一个记录该记录是否已被删除的字段。当你做删除时,只需更新字段中的值。也许调用删除的字段,值为0它是有效的,值为1删除。如果您不打算删除数据,则可以通过这种方式恢复数据。 – 2012-04-26 23:50:09

回答

2

添加一个外键,然后在列定义使用ON DELETE CASCADE当父行被删除

+0

+1 - 尽管如此,假定所用数据库支持具有级联删除的外键(例如,并非所有的MySQL存储引擎都这样做),并且表之间存在外键关系 - 问题不包括任何表示两个表共享密钥的谓词。 – 2012-04-27 00:02:10

+0

非常感谢!我读了它,我明白了。我的代码工作。 – user1359930 2012-04-27 00:02:54

0

这将取决于该数据库(也可能是哪些约束将采取删除子行的护理是否到位)是否可以在单个DML语句中执行此操作。然而,更简单的选项通常是使用两个DML语句来做这样的事情。

$query = "DELETE FROM user WHERE user.uid = '$uid'"; 
$db->exec($query); 
$query = "DELETE FROM login WHERE login.lid= '$lid'"; 
$db->exec($query); 
+0

感谢您的意见:) – user1359930 2012-04-27 00:31:33