2

可能重复:
php / Mysql 最佳树形结构

我目前正在用 PHP 和 MySQL 编写文件系统。

文件夹存储在数据库表“文件夹”中,字段为:“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 的好方法。但是当我有数千个文件夹时,这可能需要很长时间?

你有什么建议?我考虑过创建一个单独的表“父母”来存储所有依赖项:

++++++++++++++++++++++++++
+ 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 命令遍历表“文件夹”吗?

当然我的问题也是关于速度的。进行多个简单查询会更快还是更好地只获取一个大的数据?

使用“父母”表,我可以通过一个查询(合并两个表)和一些 PHP 找出文件夹的路径。没有表“父母”,除了全选,我不知道怎么办,这不是解决办法吗?

4

0 回答 0