我目前正在使用PHP和MySQL编写文件系统。
文件夹存储在数据库表“folders”中,其中包含字段:“id”,“name”,“parent_id”。我认为这将是最快的方式。
文件存储在系统中,由数据库表“files”链接,字段为“id”,“name”,“parent_id”和“realUrl”。
假设我要创建一个这样的路径:One / Folder / After / Another / Folder。这是表“文件夹”然后:
+++++++++++++++++++++++++++++
+ id | name | parent_id +
+----|----------|-----------+
+ 1 | One | 0 +
+ 2 | Folder | 1 +
+ 3 | After | 2 +
+ 4 | Another | 3 +
+ 5 | Folder | 4 +
很明显,找出像文件夹路径这样的东西并不是那么简单。当我请求文件夹“文件夹”的数据时,我想知道这个特定文件夹的路径。除了选择数据库表的所有内容然后用PHP迭代它之外,我无法找到一个很好的MySQL出路。但是,当我有数千个文件夹时,这可能需要很长时间?
你会建议什么?我想创建一个单独的表“parent”,我存储所有依赖项:
++++++++++++++++++++++++++
+ folders_id | parent_id +
+------------|-----------+
+ 2 | 1 +
+ 3 | 1 +
+ 3 | 2 +
+ 4 | 1 +
+ 4 | 2 +
+ 4 | 3 +
+ 5 | 1 +
+ 5 | 2 +
+ 5 | 3 +
+ 5 | 4 +
因此,如果我想从“一个”到“文件夹”获取路径,我只需要
SELECT parent_id FROM parents WHERE folders_id=5
存在发生错误的巨大风险,当然这只是冗余数据。那么可能有一个更智能的解决方案?我可以直接通过MySQL命令迭代表“文件夹”吗?
当然我的问题也与速度有关。是否可以更快地进行多个简单查询,或者只使用一个较大的查询来获取数据?
使用表“parents”,我可以通过一个查询(合并两个表)和一些PHP找到文件夹的路径。没有表“父母”,我不知道如何除了选择所有,这不是解决方案?