parser

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

 

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

Все те же деревья

Mizter Egoist 05.04.2016 12:08

Продолжаю мучить себя и вас.
Задача: научиться доставать родителя и всех его потомков.

Столкнулся с проблемой вывода потомков заданного родителя.
Попробовал два способа.

Первый. Достает родителя и его потомков второго уровня.
$tree[^table::sql{
	SELECT t.dsc, h.anc AS pID, p.*
	FROM path AS t
	JOIN pages AS p
	ON (
		t.dsc = p.eID
		^if($params.tID){AND p.tID = $params.tID}
	)
	JOIN path AS h
	ON (h.dsc = t.dsc AND h.lvl = 1)
	WHERE t.anc = $params.root
}]
$tree[^tree.hash[pID][
	$.type[table]
	$.distinct(true)
]]
$index[^tree._keys[]]
$root[
	$.index[$index.key]
	$.type[$params.type]
]
^tree.add[$root]
^print[$tree]

@print[tree;pID][locals]
$pID(^pID.int($tree.index))
$cID[$tree.$pID]
$result[]
^if($cID){
	$result[^cID.menu{
		<div>
			<strong>$cID.name</strong>
			^print[$tree]($cID.dsc)
		</div>
	}]
}
Второй. Достает всех детей родителя, но имени родителя не отображает.
$tree[^table::sql{
	SELECT t.dsc, h.anc AS pID, p.*
	FROM path AS t
	JOIN pages AS p
	ON (
		t.dsc = p.eID
		^if($params.tID){AND p.tID = $params.tID}
	)
	JOIN path AS h
	ON (h.dsc = t.dsc AND h.lvl = 1)
	WHERE t.anc = 0
}]
$tree[^tree.hash[pID][
	$.type[table]
	$.distinct(true)
]]
$root[
	$.index[$params.root]
	$.type[$params.type]
]
^tree.add[$root]
^print[$tree]