id name parentid
1 category 0
2 question1 1
3 type1 2
4 type2 2
5 question2 0
6 type2 5
7 type2 5
- 類是父
- 問題1和問題2是孩子的
- TYPE1 ,type2,類型3和TYPE4是grandchilds
我想寫一個MySQL聲明與所有子記錄刪除選定的父母。我怎樣才能做到這一點?
id name parentid
1 category 0
2 question1 1
3 type1 2
4 type2 2
5 question2 0
6 type2 5
7 type2 5
我想寫一個MySQL聲明與所有子記錄刪除選定的父母。我怎樣才能做到這一點?
MySQL不支持遞歸查詢...
如果你有一個預定的深度,你可以與一些做連接。
否則,您需要在應用程序中的代碼中執行此操作,或者編寫一個Stored Proc/Function來執行此操作。
編輯:快速遞歸函數刪除...
function recursiveDelete($id) {
$result=mysql_query("SELECT * FROM yourTable WHERE parentid='$id'");
if (mysql_num_rows($result)>0) {
while($current=mysql_fetch_array($result)) {
recursiveDelete($current['id']);
}
}
mysql_query("DELETE FROM yourTable WHERE id='$id'");
}
您可以創建外鍵支持這一點。
在MySQL這個操作是這樣的:
ALTER TABLE your_table_name ADD CONSTRAINT your_table_name_parentid_to_id
FOREIGN KEY (parentid)
REFERENCES your_table_name (id)
ON DELETE CASCADE ON UPDATE CASCADE;
然後簡單
DELETE FROM your_table_name WHERE id = 2;
將刪除問題1,Type1和Type2。
但在這種情況下,可以肯定的是,對於每個parentId的值有值等於ID或parentId的是NULL:
id name parentid 1 category NULL 2 question1 1 3 type1 2 4 type2 2 5 question2 1 6 type2 5 7 type2 5
有關使用connect by
feature in Oracle如何?
納比爾先生,爲什麼不給父母,孩子和大孩子分開桌子,考慮將來會把過去放在棺材裏?做好準備。 – beck03076
hye beck..this是在moodle中創建的默認表..所以我只是按照db結構.. – nabil