Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Плоское дерево в темпоральной базе / 3 сообщений из 3, страница 1 из 1
28.05.2010, 09:00
    #36654531
serega_sh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Плоское дерево в темпоральной базе
Добрый день.
Есть такая табличка:

Код: plaintext
1.
2.
3.
4.
5.
6.
CREATE TABLE Versions (
 object_id INTEGER NOT NULL,
 owner_id INTEGER,
 depth INTEGER NOT NULL,
 updated_at INTEGER NOT NULL
)

Задача: берется какой-нибудь object_id и надо достать из базы всех его потомков и потомков его потомков и т.д.
Глубина древа известна (depth). Потомок определяется по полю owner_id. Чтобы найти потомков object_id = 1 надо найти все записи, у которых owner_id = 1. И так далее.


Пробовал генерить вот такой запрос:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SELECT * FROM(
    SELECT v0.object_id 
    FROM Versions V0 
    WHERE v0.object_id =  1 
) AS root
LEFT JOIN Versions v1 on root.object_id = v1.owner_id
....
LEFT JOIN Versions vn on v(n- 1 ).object_id = vn.owner_id

Даже с одним join-ом я не получаю корень + одного потомка. Не понимаю почему, объясните, пожалуйста.
Ну и как тут вообще надо по-правильному запрос писать?


Исходные данные:
id---owner_id---depth
1 2
2 1 1
3 2 0

Т.е. у записи с object_id=1 есть один потомок, а у этого потомка есть еще один потомок, что видно по значению depth (путь до последнего потомка) и owner_id (ссылка на родителя)
...
Рейтинг: 0 / 0
28.05.2010, 09:30
    #36654585
serega_sh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Плоское дерево в темпоральной базе
serega_sh,
отвечу сам себе. Через join оно не должно работать. Я неправильно прочитал мануал.
Как еще можно?
Нашел статью, ссылка на которую опубликована на форуме: , но идея с текстовым path мне не очень понравилась. Во-первых как-то это не производительно с лайком работать, во-вторых дерево у меня темпоральное и потомки могут быть либо равны либо "старше" (значение updated_at) своего родителя.
...
Рейтинг: 0 / 0
28.05.2010, 13:55
    #36655429
serega_sh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Плоское дерево в темпоральной базе
serega_sh,
Ошибка при публикации сообщения, у записи с object_id=1 нет владельца, там null стоит. Это корень древа.
Исходные данные:
id---owner_id---depth
1--- ---2
2---1---1
3---2---0
...
Рейтинг: 0 / 0
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Плоское дерево в темпоральной базе / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]