Как выбрать для следующего? - PullRequest
1 голос
/ 08 марта 2011

У меня есть таблица DOCUMENTS и таблица FOLDERS

FOLDERS
ID
lft
rgt

DOCUMENTS
ID
folderID -> FOLDERS(ID)
title

Итак, мы имеем произвольно глубокое дерево папок (nested-sets).Каждая папка может содержать произвольное количество документов.

Какой самый эффективный способ ВЫБРАТЬ все документы, находящиеся в определенной папке?То есть я хочу ВЫБРАТЬ не только документы, которые находятся в папке, но и документы, которые находятся в подпапках этой папки.

Редактировать: Пример данных, чтобы сделать вещи более понятными:

FOLDERS
ID     LFT     RGT
1      1       10      
2      2       5
3      3       4
4      6       7
5      8       9

Это представляет структуру папок, например, так ...

       1
    2  4  5
 3

Где 2, 4, 5 - дети от 1, а 3 - от 2

Сейчас ...

Допустим, ДОКУМЕНТЫ имеют следующие данные ...

DOCUMENTS
ID     FolderID    Title
1      5           Doc 1
2      3           Doc 2
3      2           Doc 3

Учитывая идентификатор папки, я хочу ВЫБРАТЬ все документы в этой папке, и все документы в этомподпапки папки.Так, например, если для folderID задано значение 2, SELECT вернет документы 2 и 3

Спасибо (заранее) за вашу помощь

1 Ответ

0 голосов
/ 08 марта 2011

Во-первых, вы хотите получить значения lft и rgt из таблицы папок:

select lft, rgt from folders where id = 2;

... затем используйте те для идентификации документов, которые существуют в этом узле или его дочерних элементах:

select d.* from documents d left join folders f on f.id = d.folderID where f.lft >= 2 and f.rgt <= 5;

Вы можете вызывать эти два запроса отдельно в своем коде, вы можете объединить их с подзапросами или написать хранимую процедуру, которая объединяет их.

...