Nested Sets: как вычеслить Parent_ID?

ccop

Новичок
Nested Sets: как вычеслить Parent_ID?

Собственно вопрос...
Есть дерево типа Nested Sets.
Eслия я знаю ID документа, как узнать ID документа породившего этот документ :).
Спасибо!
 

Sam

Новичок
лучше всего хранить parent_id как избыточную информацию.

если не хочешь - выбери путь к данному id, отсортруй по cleft DESC и возми первую запись
 

.des.

Поставил пиво кому надо ;-)
если хранить parent_id, то помимо преимуществ получаем все недостатки adjacency list.
В качестве компромисса лучше хранить level.
 

ccop

Новичок
sage
Этот вариант не подходит!

.des.
Level уже хранится!
 

.des.

Поставил пиво кому надо ;-)
Тогда так :)
Код:
SELECT 
     t2.id 
FROM tree_ns AS t1, 
    tree_ns AS t2 
WHERE 
      t1.id=:id AND 
      t1.cleft BETWEEN t2.cleft AND t2.cright AND
      t1.level=t2.level+1
 

ccop

Новичок
.des.
Спасибо!

-~{}~ 01.04.06 19:33:

Есть следующий запрос, который выводит список документ из задаными параметрами:
[sql]
SELECT r. * , t.cat_id, t.cat_title, t.cat_type, t.cat_permission, t.cat_date, pt.cat_url pcat
FROM `categories` AS r, `cat_general` AS t, `categories` AS pr, `cat_general` AS pt
WHERE

r.cat_left = r.cat_right -1 AND r.cat_left >106 AND r.cat_right <143 AND r.cat_id = t.cat_id AND r.cat_level >0 AND r.cat_left
BETWEEN pr.cat_left AND pr.cat_right AND pr.cat_level = r.cat_level -1 AND pr.cat_id = pt.cat_id

ORDER BY cat_date DESC
LIMIT 0 , 25
[/sql]
Наибольший интерес представляет следующий фрагмент:
[sql]
AND r.cat_left
BETWEEN pr.cat_left AND pr.cat_right AND pr.cat_level = r.cat_level -1 AND pr.cat_id = pt.cat_id
[/sql]
Это я попытался интегрироваь выше приведенный код, повторю:
[sql]
SELECT
t2.cat_id
FROM categories AS t1,
categories AS t2
WHERE
t1.cat_id=:cat_id AND
t1.cat_left BETWEEN t2.cat_left AND t2.cat_right AND
t1.cat_level=t2.cat_level+1
[/sql]
Первый запрос работает не правильно в том случае, если есть следующая структура:
sds
+dsfdsfdsf
+sdsads
+jkljljljl
...и мы получаем все документы из категории sds, dsfdsfdsf, sdsads, jkljljljl т.е. по сути просто просматриваем документы. которые расположены в sds.
В этом случаи у нас переменная pcat (которую мы получили из запроса поле pt.cat_url) имеет значение категории jkljljljl.

Где может быть ошибка? Или может мне можно как-то по другому получить значение родительской директории?
Спасибо большое!

-~{}~ 02.04.06 11:49:

Я там немного не увидел, структура такова, что dsfdsfdsf - подкаталог sds, sdsads подкаталог dsfdsfdsf и т.п.
 
Сверху