2012-04-26 58 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