1

假设我有两张桌子:

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

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

我想从tableA哪里删除所有记录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 的回答之上,如果这是您想要做的永久性事情(即数据是非规范化的),您可以将 a 添加CASCADE DELETEtableB.name该 references tableA.name。这要求您使用支持外键的数据库引擎(即 InnoDB)

于 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 回答