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

Might be silly but why don't you just use the old good referential integrity from INNODB?

Setting a reflexive foreign reference key (rule_id, parent_id) with ON DELETE CASCADE clause would solve the problem easily.

于 2012-10-07T14:07:58.277 に答える
1

where句には「OR」が必要です。

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

「AND」を「OR」に変更します。

$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 に答える