可能重复:
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 找出文件夹的路径。没有表“父母”,除了全选,我不知道怎么办,这不是解决办法吗?