Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 按id和父\u id删除_Php_Mysql_Sql Delete - Fatal编程技术网

Php 按id和父\u id删除

Php 按id和父\u id删除,php,mysql,sql-delete,Php,Mysql,Sql Delete,我有一张类似于此的桌子: rule_id parent_id 1 0 2 0 3 2 4 2 5 3 当我使用DELETE查询和DELETE(比如说id 2)时,我想删除具有父id作为该id的行 成功删除后,该表应如下所示: rule_id parent_id 1 0 5 3 所以所有曾经的2现在都消失了 我试过这个,我确信它会起作用,但它没有 $sql

我有一张类似于此的桌子:

rule_id    parent_id
1          0
2          0
3          2
4          2
5          3
当我使用DELETE查询和DELETE(比如说id 2)时,我想删除具有父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 : '');

在where子句中需要一个'OR'

DELETE FROM RULES_TABLE WHERE rule_id=? OR parent_id=?

在where子句中需要一个'OR'

DELETE FROM RULES_TABLE WHERE rule_id=? OR parent_id=?
将“和”改为“或”:

将“和”改为“或”:


可能有点傻,但为什么不使用INNODB提供的旧的良好引用完整性呢


用DELETE CASCADE上的
子句设置一个自反的外部引用键
(rule\u id,parent\u id)
可以很容易地解决这个问题。

可能很愚蠢,但是为什么不使用INNODB提供的旧的良好引用完整性呢


使用DELETE CASCADE上的
子句设置自反外部引用键
(rule\u id,parent\u id)
,可以很容易地解决这个问题。

rule\u id是什么?你的表格描述中没有提到。我想你不需要它吗?当然,您所需要的只是
“从父项id=”所在的表中删除”。(int)$ruleid
我确实需要它。如果rule_id不是任何行的父行,但我仍然想删除该rule id呢?啊,我没有从问题中得到答案-在这种情况下,请参阅pilotcam的答案。当然,最好的方法是定义关系外键和delete CASCADE上的
?rule_id是什么?你的表格描述中没有提到。我想你不需要它吗?当然,您所需要的只是
“从父项id=”所在的表中删除”。(int)$ruleid
我确实需要它。如果rule_id不是任何行的父级,但我仍然想删除该rule id呢?啊,我不是从问题中得到的-在这种情况下,请参阅pilotcam的答案。当然,最好的方法是在delete CASCADE上定义关系外键和