我有一个使用结构映射树的数据库表(目录)parent_id=>id
。
我有另一个表(文件)将文件映射到第一个表中的项目directory_id => directories.id
我想要做的是,给定第一个表中的 id,删除第二个表中与同一树中所选 id 相同或更高的所有行。
然后删除第一个表中在同一棵树中相等或向上的所有行。
解释它的最好方法是文件系统,删除一个目录,它会删除它下面的所有内容。
我能想到的唯一方法是(半伪代码!):
$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));