2012-10-07 202 views
1

我有一個表,看起來與此類似:通過ID刪除和PARENT_ID

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

當我使用刪除查詢和刪除假設ID 2,我想刪除有PARENT_ID行作爲該ID。

成功刪除後,該表應該是這樣的:

rule_id parent_id 
1   0 
5   3 

是有現在不見了等等應有盡有。

我試過這個,我確定它會工作,但它沒有。

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

什麼是rule_id?這在表格描述中沒有提及 – andrewsi

+0

對不起,這是id。 – Aborted

+0

那我覺得你不需要它嗎?當然,你需要的只是''DELETE FROM table WHERE parent_id ='。 (int)$ ruleid' – andrewsi

回答

1

在where子句中需要'OR'。

DELETE FROM RULES_TABLE WHERE rule_id=? OR parent_id=? 
0

改變你的「和」「或」:

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

可能是愚蠢的,但你爲什麼不只是使用來自INNODB舊的好參照完整性?

使用ON DELETE CASCADE子句設置反身外國參考碼(rule_id, parent_id)可以輕鬆解決問題。