Как объединить два запроса PDO в один? - PullRequest
2 голосов
/ 28 апреля 2011

У меня есть две таблицы с именами 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);

Ответы [ 2 ]

3 голосов
/ 28 апреля 2011

Ответ на этот вопрос лежит, по моему мнению, не в ваших утверждениях pHp или даже в вашем запросе, а в HOW , когда вы создали свои таблицы в базе данных.Когда вы создали свою таблицу, вы должны указать отношение FOREIGN KEY, а затем ON DELETE CASCADE решит все проблемы со ссылками, когда родительская строка будет удалена, все ссылочные строки с ON DELETE CASCADE также будут удалены..

так что это может быть что-то вроде этого в вашем sql для контактов

FOREIGN KEY id REFERENCES users(id) ON DELETE CASCADE

в зависимости от базы данных, которую вы используете.

2 голосов
/ 28 апреля 2011

Вам нужно найти способ объединить таблицы и использовать запрос типа

DELETE t1, t2 FROM t1 INNER JOIN t2 INNER JOIN t3
WHERE t1.id=t2.id AND t2.id=t3.id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...