繁体   English   中英

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

[英]How to merge two PDO queries into one?

我有两个名为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);

根据我的说法,这个问题的答案不在您的 pHp 语句中,甚至不在您的查询中,而是在您如何在数据库中创建表。 创建表时,您必须指定 FOREIGN KEY 关系,然后在删除父行时, ON DELETE CASCADE将解决所有引用问题,所有具有 ON DELETE CASCADE 的引用行也将被删除。

所以在你的 sql 中可能是这样的联系人

FOREIGN KEY id REFERENCES users(id) ON DELETE CASCADE

取决于您使用的数据库。

您需要找到将表连接在一起的方法并使用类似的查询

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM