I have a table DOCUMENTS and a table FOLDERS
FOLDERS
ID
lft
rgt
DOCUMENTS
ID
folderID -> FOLDERS(ID)
title
So, what we have here is an arbitrarily deep tree of folders (nested-sets). Each folder can contain an arbitrary number of documents.
What is the most efficient way to SELECT all of the documents that are beneathe a certain folder? That is, I want to SELECT not only the documents that are in a folder, but the documents that are in that folder’s subfolders.
Edit: Sample data to make things more clear:
FOLDERS
ID LFT RGT
1 1 10
2 2 5
3 3 4
4 6 7
5 8 9
This represents a folder structure like so…
1
2 4 5
3
Where 2, 4, 5 are children of 1, and 3 is a child of 2
Now…
Let’s say DOCUMENTS has the following data…
DOCUMENTS
ID FolderID Title
1 5 Doc 1
2 3 Doc 2
3 2 Doc 3
Given the ID of a folder, I want to SELECT all of the documents in that folder, and all of the documents in that folder’s subfolders. So for example given a folderID of 2, the SELECT would return documents 2 and 3
Thanks (in advance) for your help
First, you’ll want to get the
lftandrgtvalues from the folders table:…then use those to identify documents that exist within that node or its children:
You can call these two queries separately in your code, you could combine them with subqueries, or you could write a stored procedure that combines them.