Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
28.05.2010, 09:00
|
|||
---|---|---|---|
|
|||
Плоское дерево в темпоральной базе |
|||
#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:30
|
|||
---|---|---|---|
|
|||
Плоское дерево в темпоральной базе |
|||
#18+
serega_sh, отвечу сам себе. Через join оно не должно работать. Я неправильно прочитал мануал. Как еще можно? Нашел статью, ссылка на которую опубликована на форуме: , но идея с текстовым path мне не очень понравилась. Во-первых как-то это не производительно с лайком работать, во-вторых дерево у меня темпоральное и потомки могут быть либо равны либо "старше" (значение updated_at) своего родителя. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=54&tablet=1&tid=2009334]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
123ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
35ms |
get tp. blocked users: |
2ms |
others: | 331ms |
total: | 536ms |
0 / 0 |