将虚拟文件夹结构复制到另一个用户


Copy virtual folder structure to another user

我有一个上传脚本,它具有链接到用户的虚拟文件夹结构(因此没有实际结构)。所以我可以为每个用户制作不同的结构。

此结构(仅)保存在数据库中。文件链接在数据库中,但都保存在一个文件夹中。但现在我想把一个完整的结构复制给另一个用户。该结构可以有无限个子文件夹。

数据库看起来像:

 id   | user | parent | name
  1   |  6   |   0    | Folder 1
  2   |  6   |   0    | Folder 2
  3   |  6   |   1    | Sub of Folder 1
  4   |  6   |   1    | 2nd Sub of Folder 1
  5   |  6   |   2    | Sub of Folder 2
  6   |  6   |   3    | Sub of Sub of Folder 1
  7   |  6   |   6    | Sub of Sub of Sub of Folder 1

将此复制到另一个用户的最佳方式是什么?只使用mysql有可能吗?

(请记住,id是自动递增索引,parent指的是id)希望有人能帮忙。

@Maximus2012正在做一些事情。

INSERT INTO table (
  user,
  parent,
  name
)
SELECT (
  7 as user,
  parent,
  name
)
FROM table
WHERE user = 6;

这样做的目的是从表中选择给定的列,并使用结果将值插入表中。请记住,必须在INSERT查询中指定列,然后按与SELECT子查询相同的顺序指定列。作为用户的7显然应该是新用户的适当ID。但是,这将演示如何在子查询中包含具体值。

请参阅此SQL Fiddle。

需要注意的一点是,如果在查询过程中修改了表,则可能会遇到竞争条件。遗憾的是,我对MySQL不够熟悉,无法确保这种情况不会发生。在复制时锁定表以进行写入(无论如何,这种情况都可能发生在写入时),或者确定事务是否会使其安全。

那里描述的模式和INSERT ... SELECT状态确实按照请求执行,并将导致最适合您的完整用例的方法。