我想從遞歸函數的多級菜單中刪除類別。爲了更仔細瞭解情況,讓我們在MySQL表結構先來看看多級菜單項刪除遞歸函數
CREATE TABLE IF NOT EXISTS menu(
id INT(5) NOT NULL AUTO_INCREMENT PRIMARY KEY,
p_id INT(5),
sort_id INT(5) NOT NULL,
title VARCHAR(50) CHARSET utf8 COLLATE 'utf8_unicode_ci' NOT NULL,
);
它看起來是這樣的,當它被檢索
id | p_id | sort_id | title |
1 | 0 | 1 | root1 |
2 | 1 | 1 | sub of root1
3 | 0 | 2 | root2 |
4 | 2 | 1 | sub of "sub of root1"
... | ... | ... | ....
etc ...
我寫PHP腳本進行刪除類別,這=>
function del_cat($connection,$id){
if (!$connection->connect_errno){
if ($connection->set_charset("utf8")){
if ($r = $connection->query("SELECT id FROM menu WHERE p_id=" . $id . "")){
if ($r->num_rows>0){
while ($row = $r->fetch_assoc()){
del_cat($connection,$row['id']);
}
} else {
$connection->query("DELETE FROM menu WHERE id=" . $id . "");
}
$r->free();
}
}
}
}
$connection
變量是一個剛MySQL連接對象,並且$id
是在表id
。
它工作得很好,當我刪除一行(我的意思是當類別沒有子,子類別),例如1 | 0 | 1 | root1 |
,但是當我想刪除例如4 | 2 | 1 | sub of "sub of root1"
它不會刪除類別與子類別。任何想法如何解決這個問題?謝謝
如果你在該表中有級聯刪除的外鍵關係,mysql會負責爲你刪除子記錄。 – 2012-08-17 16:02:01
@MarcB我不使用外鍵 – tnanoba 2012-08-17 16:02:42
@MarcB這是完全相同的表,我試圖使這個行動 – tnanoba 2012-08-17 16:03:26