我有两个名为users
和contacts
的表。我想一次删除两个表中的记录。为此我现在使用下面的代码。
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);
答案 0 :(得分:3)
这个问题的答案在于,根据我的说法,不是在您的pHp语句中,甚至在您的查询中,而是在 HOW 中,您在数据库中创建了表。 创建表时,必须指定FOREIGN KEY关系,然后 ON DELETE CASCADE 将在删除父行时解决所有引用问题所有带有ON DELETE CASCADE的引用行也将是删除。
所以你的sql中的联系人可能是这样的
FOREIGN KEY id REFERENCES users(id) ON DELETE CASCADE
取决于您使用的数据库。
答案 1 :(得分:2)
您需要找到将表连接在一起并使用
之类的查询的方法DELETE t1, t2 FROM t1 INNER JOIN t2 INNER JOIN t3
WHERE t1.id=t2.id AND t2.id=t3.id;