再帰機能で多段メニューからカテゴリを削除したい。状況をより注意深く理解するために、最初に 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行を削除している場合(つまり、カテゴリに子、サブカテゴリがない場合)は問題なく機能しますが、1 | 0 | 1 | root1 |
たとえば削除したい場合、4 | 2 | 1 | sub of "sub of root1"
サブカテゴリのあるカテゴリは削除されません。この問題を解決する方法はありますか? ありがとう