我正在开发一些文档管理系统,需要为用户提供文档共享功能。我有两个表,一个包含上传文件的信息(比如表1),另一个表包含与用户共享文件的信息(比如表2)。
请参阅下图:
现在我需要根据用户共享显示文档列表。 W.r.t到上表,因为表1中的'Folder 3'是'Folder 2'的子项,它是'Folder 1'的子项。
现在只有“文件夹3”与用户“1234”共享(参见表2),当文档列表首先显示时,默认情况下将显示父母,在我们的案例中为“文件夹1”。< / p>
在我的要求中,我只需要显示父母要显示子文件夹的导航,因为文件夹1有一个孩子'文档1'而文件夹2有一个孩子'文档2'。
但是当我打开用户'1234'时,我需要显示的是:
我希望我能够解释我的问题。我需要您的帮助来准备一些查询或存储过程以有效地获取所需的数据。我使用MSSQL Server 2008作为数据库。
提前谢谢你。
答案 0 :(得分:0)
通过您的评论,您正在寻找一种方法来从用户拥有权限的任何子项以及下面的所有内容中遍历您的文件夹结构。那么也许你正在寻找一个递归查询?
记录用户拥有+上面所有内容的权利:
WITH Child(id, name, parentId) AS
(
SELECT id, name, parentId
FROM Table1
WHERE EXISTS ( SELECT *
FROM Table2
WHERE Table1.Id = Table2.ShareDocId
AND Table2.UserId = :userId )
UNION ALL
SELECT Child.id, Child.name, Child.parentId
FROM Table1 as Parent, Child
WHERE Child.parentId = Parent.id
)
SELECT *
FROM Child
记录用户拥有以下所有内容的权利:
WITH Parent(id, name, parentId) AS
(
SELECT id, name, parentId
FROM Table1
WHERE EXISTS ( SELECT *
FROM Table2
WHERE Table1.Id = Table2.ShareDocId
AND Table2.UserId = :userId )
UNION ALL
SELECT Parent.id, Parent.name, Parent.parentId
FROM Table1 as Child, Parent
WHERE Child.parentId = Parent.id
)
SELECT *
FROM Child
注意:您几乎肯定会获得重复记录(例如,如果有人对同一父母的多个孩子拥有权利)。可能需要调整并且可能需要DISTINCT。