|
Плоское дерево в темпоральной базе
|
|||
---|---|---|---|
#18+
Добрый день. Есть такая табличка: Код: plaintext 1. 2. 3. 4. 5. 6.
Задача: берется какой-нибудь object_id и надо достать из базы всех его потомков и потомков его потомков и т.д. Глубина древа известна (depth). Потомок определяется по полю owner_id. Чтобы найти потомков object_id = 1 надо найти все записи, у которых owner_id = 1. И так далее. Пробовал генерить вот такой запрос: Код: plaintext 1. 2. 3. 4. 5. 6. 7.
Даже с одним join-ом я не получаю корень + одного потомка. Не понимаю почему, объясните, пожалуйста. Ну и как тут вообще надо по-правильному запрос писать? Исходные данные: id---owner_id---depth 1 2 2 1 1 3 2 0 Т.е. у записи с object_id=1 есть один потомок, а у этого потомка есть еще один потомок, что видно по значению depth (путь до последнего потомка) и owner_id (ссылка на родителя) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2010, 09:00 |
|
Плоское дерево в темпоральной базе
|
|||
---|---|---|---|
#18+
serega_sh, отвечу сам себе. Через join оно не должно работать. Я неправильно прочитал мануал. Как еще можно? Нашел статью, ссылка на которую опубликована на форуме: , но идея с текстовым path мне не очень понравилась. Во-первых как-то это не производительно с лайком работать, во-вторых дерево у меня темпоральное и потомки могут быть либо равны либо "старше" (значение updated_at) своего родителя. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2010, 09:30 |
|
|
start [/forum/topic.php?fid=54&gotonew=1&tid=2009334]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
62ms |
get topic data: |
14ms |
get first new msg: |
7ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
2ms |
others: | 18ms |
total: | 183ms |
0 / 0 |