我正在JS+PHP+MySQL上做一个基于Web的文件资源管理器。
我选择了两个表:一个表包含文件夹路径,第二个表包含第一个表中的文件夹ID和文件名。 所以看起来是这样的:
文件夹表:
|------------------------------------|
|id |relative_path|status|owner_id|
|------------------------------------|
|1 |me |1 |333 |
|2 |me/you |1 |333 |
|3 |me/you/us |1 |333 |
|------------------------------------|
文件表:
|---------------------------------------------------------|
|id |folder_id|file_name|status|realpath |
|---------------------------------------------------------|
|1 |1 |file1 |1 |/datetime_rand/file1 |
|2 |2 |file2 |1 |/datetime_rand/file2 |
|3 |3 |file77 |1 |/datetime_rand/file77 |
|---------------------------------------------------------|
如果用户需要删除一个文件夹,那么这些文件夹中的所有子文件夹和文件显然也需要删除(我将状态从1更改为0以将文件记录标记为已删除)。
到目前为止,我已经知道如何“删除”文件夹和其中的所有文件,而不去重复:
UPDATE folders d
LEFT JOIN files f ON d.id = f.folder_id
SET d.status = 0 AND f.status = 0
WHERE d.id = ?
我只获得folder.id
(d.id
)作为传入参数删除
删除所有子文件夹的最有效方法是什么? 我可以在一个查询中完成所有操作吗? 有什么办法我可以避免全文搜索,或者那是不会慢的?
UPDATE folders fo
INNER JOIN files fi ON fo.id = fi.folder_id
SET fo.status = 0,
fi.status = 0
WHERE fo.relative_path LIKE CONCAT( @folder_to_delete, '%' )