parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Если очень хочется

G_Z 03.11.2011 20:22 / 03.11.2011 20:23

то можно выбирать рекурсивно.
Без избыточности варианта два: всё дерево или запросы для каждого уровня.

Потребуется один запрос на выборку каждого уровня.
Только не вручную, как у вас в первом сообщении.
$item_id(5)
^crumbs($item_id)

@crumbs[item_id][id;crumbs;item]
$id(^item_id.int(0))
$crumbs[^table::create{id	name}]

^while($id){
	$item[^table::sql{
		SELECT id, par_id, name
		FROM cg_adr
		WHERE id = $id
	}]
	^crumbs.append{$item.id	$item.name}

	$id($item.par_id)
}

^crumbs.sort(^crumbs.line[])[desc]

$result[^crumbs.menu{^if($crumbs.id eq $item_id){<strong>$crumbs.name</strong>}{<a href="/$crumbs.id">$crumbs.name</a>}}[ / ]]
Опять же, если в дереве не десяток тысяч элементов, возможно, выбрать его целиком и иметь под рукой в нужном виде будет проще, нежели поддерживать денормализованные данные.
Но лучше, как вам советует Sumo, добавить поле «ветви» и делать выборки для построения градусника в один запрос.