1

2つのテーブルがあるとしましょう。

tableA
-------
type   (varchar)
name   (varchar)

tableB
-------
name   (varchar)
...

tableAwhereからすべてのレコードを削除したいtype='foo'。私はこれを次のように行うことができます:

$STH=$DBH->prepare("DELETE FROM tableA WHERE type = :t");
$STH->bindParam(':t','foo');
try {
    $STH->execute();
} catch(PDOException $e) {
    echo $e->getMessage();
}

name次に、削除した各レコードのフィールドをメモし、tableAこれを使用してtableB、それらの名前のレコードを削除します。どうやってやるの?

削除されたレコードからすべてのフィールド$DBH->lastInsertId();を返すことを除いて、同等のものが必要です。name

ありがとう。

4

3 に答える 3

5

両方のテーブルを結合して、それらに対して削除を実行できます。例:

DELETE  a, b
FROM    table1 a
        INNER JOIN table2 b
          ON a.name = b.name
WHERE   a.type = 'foo'
于 2012-12-31T05:29:46.933 に答える
2

JWの答えに加えて、これが永続的なことである場合(つまり、データが非正規化されている場合)、その参照CASCADE DELETEにを追加できます。これには、外部キーをサポートするデータベースエンジン(つまり、InnoDB)を使用する必要があります。tableB.nametableA.name

于 2012-12-31T05:31:16.403 に答える
1

そして最後のオプションは、トリガーの使用法です。ここでは手動です:http: //dev.mysql.com/doc/refman/5.0/en/triggers.htmlしかし、JWの答えはエレガントであなたにとって良い解決策です

于 2012-12-31T05:36:11.983 に答える