1

我有一个看起来与此类似的表:

rule_id    parent_id
1          0
2          0
3          2
4          2
5          3

当我使用 DELETE 查询并删除假设id 2时,我想删除以parent_id作为该 id 的行。

删除成功后,表格应如下所示:

rule_id    parent_id
1          0
5          3

所以所有有2的东西现在都没有了。

我已经尝试过了,我确信它会起作用,但它没有。

$sql = 'DELETE FROM ' . RULES_TABLE .   
    ' WHERE rule_id = ' . (int) $rule_id . 
        (($type == 'cat') ? ' AND parent_id = ' . (int) $rule_id : '');
4

3 回答 3

3

可能很傻,但你为什么不直接使用来自 INNODB 的旧的良好参照完整性呢?

(rule_id, parent_id)使用子句设置自反外引用键ON DELETE CASCADE可以轻松解决问题。

于 2012-10-07T14:07:58.277 回答
1

您需要在 where 子句中使用“或”。

DELETE FROM RULES_TABLE WHERE rule_id=? OR parent_id=?
于 2012-10-07T14:03:00.987 回答
0

将“与”更改为“或”:

$sql = 'DELETE FROM ' . RULES_TABLE .   
' WHERE rule_id = ' . (int) $rule_id . 
    (($type == 'cat') ? ' OR parent_id = ' . (int) $rule_id : '');
于 2012-10-07T14:03:59.847 回答