如何将两个PDO查询合并为一个?

时间:2011-04-28 08:52:27

标签: php mysql pdo

我有两个名为userscontacts的表。我想一次删除两个表中的记录。为此我现在使用下面的代码。

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 个答案:

答案 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;