提问者:小点点

管理存储在MySQL表中的路径字符串


我正在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)作为传入参数删除

删除所有子文件夹的最有效方法是什么? 我可以在一个查询中完成所有操作吗? 有什么办法我可以避免全文搜索,或者那是不会慢的?


共1个答案

匿名用户

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, '%' )