構造を使用してツリーをマップするデータベース テーブル (ディレクトリ) がありますparent_id=>id
。
ファイルを最初のテーブルのアイテムにマップする別のテーブル (ファイル) がありますdirectory_id => directories.id
私ができるようにしたいのは、最初のテーブルのIDを指定して、同じツリーで選択したID以上の場所にある2番目のテーブルのすべての行を削除することです。
次に、同じツリー内で等しいか上にある最初のテーブルのすべての行を削除します。
それを説明する最良の方法は、ファイルシステムであり、ディレクトリを削除し、その下のすべてを削除します。
これを行うために私が考えることができる唯一の方法は(半分の疑似コードです!):
$id = :id
$files = array();
$directories = array($id);
delete_tree($query:results, $files, $directories);
function delete_tree($id, &$files, &$directories){
$query = SELECT `id` FROM `directories` WHERE `parent_id` = $id;
foreach($query:results as $directory){
$directories[] = $directory:id;
$query2 = SELECT `id` FROM `files` WHERE `directory_id` = $directory:id;
foreach($query2:results as $file){
$files[] = $file:id
}
delete_tree($directory:id, $files, $directories);
}
}
$query = DELETE from `directories` WHERE `id` IN (explode(',', $directories));
$query = DELETE from `files` WHERE `id` IN (explode(',', $files));