2011-04-28 156 views
2

我有兩個表名爲userscontacts。我想一次刪除兩張表中的記錄。爲此,我現在使用下面的代碼。如何將兩個PDO查詢合併爲一個?

public function delete($userId, $contactId) { 
    /* Since Values cannot be mixed (the Numbers) with control flow logic   
    (the commas) with prepared statements needs one placeholder per Value. */ 
    //As many question marks as array entries; the last one needs no comma 
    $questionMarks = str_repeat("?,", count($userId)-1)."?"; 
    $sth = $this->dbh->prepare("DELETE FROM users WHERE id IN($questionMarks)"); 
    $sth->execute($userId); 

    $questionMarks = str_repeat("?,", count($contactId)-1) . "?"; 
    $sth = $this->dbh->prepare("DELETE FROM contacts WHERE id IN($questionMarks)"); 
    $sth->execute($contactId); 
} 

請注意$userId$contactId將是一個陣列和計數始終是相等的。

如何將這兩個查詢合併爲一個?

答:

下面的查詢爲我工作。

DELETE users,contacts FROM users INNER JOIN contacts WHERE users.id IN (2) AND contacts.id IN (2); 

回答

2

你需要找到連接表一起使用像

DELETE t1, t2 FROM t1 INNER JOIN t2 INNER JOIN t3 
WHERE t1.id=t2.id AND t2.id=t3.id; 
+0

AHHA查詢的方式,能解決我的問題,是如何愚蠢的我不給MySQL文檔中查找相關要求前,還有謝謝爲了您的幫助,我使用了下面的代碼,它可以工作。 DELETE用戶,聯繫人用戶INNER JOIN聯繫人WHERE users.id IN(2)AND contacts.id IN(2); – 2011-04-28 09:13:05

+0

您可能需要添加ON子句或Join。 – Pentium10 2011-04-28 09:17:49

+0

這將會更好,我猜。再一次感謝你 :) – 2011-04-28 09:21:56

3

回答這一問題,首先,根據我,而不是你的PHP語句,甚至在你的查詢,但在如何你在數據庫中創建你的表。 當你創建你的表時,你必須指定一個FOREIGN KEY關係,然後一個ON DELETE CASCADE將解決所有引用問題,當刪除父行時,所有具有ON DELETE CASCADE的引用行也將被刪除。

所以它可能會像這樣在您的SQL爲根據您使用的數據庫上的聯繫人

FOREIGN KEY id REFERENCES users(id) ON DELETE CASCADE