我有一张类似于此的表格:
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 : '');
答案 0 :(得分:3)
可能很傻但你为什么不使用INNODB旧的良好参照完整性?
使用(rule_id, parent_id)
子句设置反身外部引用键ON DELETE CASCADE
可以轻松解决问题。
答案 1 :(得分:1)
你的where子句中需要一个'OR'。
DELETE FROM RULES_TABLE WHERE rule_id=? OR parent_id=?
答案 2 :(得分:0)
将“AND”更改为“OR”:
$sql = 'DELETE FROM ' . RULES_TABLE .
' WHERE rule_id = ' . (int) $rule_id .
(($type == 'cat') ? ' OR parent_id = ' . (int) $rule_id : '');