parser

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

 

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

Ответ

Mizter Egoist 15.04.2016 14:44 / 15.04.2016 14:46

Сделал рабочую модель с подзапросом:
$tree[^table::sql{
	SELECT
		t.dsc,
		h.anc AS pID,
		(
			SELECT GROUP_CONCAT(u.url ORDER BY u.eID SEPARATOR '/')
			FROM pages AS u
			JOIN path AS r ON (u.eID = r.anc)
			WHERE 1 = 1
				AND t.dsc = r.dsc
				AND r.anc > 0
		) AS uri,
		p.*
	FROM path AS t
	JOIN pages AS p ON (p.eID = t.dsc)
	JOIN path AS h ON (h.dsc = t.dsc AND h.lvl = 1)
	WHERE t.anc = $params.root
	ORDER BY h.anc
}]
Теперь извлекает и дерево и готовые адреса.

Однако отдельный метод меня привлекает больше.

Как правильно организовать все методы в одну рабочую схему?
@tree[params]
$tree[^table::sql{
	SELECT
		t.dsc,
		h.anc AS pID
	FROM path AS t
	JOIN path AS h ON (h.dsc = t.dsc AND h.lvl = 1)
	WHERE t.anc = $params.root
	ORDER BY h.anc
}]
$tree[^tree.hash[pID][
	$.type[table]
	$.distinct(true)
]]
^getURLs[$tree]

@getURLs[pages]
$result[^hash::sql{
	SELECT t.dsc, GROUP_CONCAT(u.url ORDER BY u.eID SEPARATOR '/') AS uri, u.*
	FROM pages AS u
	JOIN path AS r ON (u.eID = r.anc)
	WHERE 1
		AND t.dsc IN (^pages.menu{$pages.dsc}[,])
		AND t.anc > 0
	GROUP BY t.dsc
}]
^print[$pages]

@print[tree;pID][locals]
$pID(^pID.int(^tree._at[first;key]))
$cID[$tree.$pID]]
$result[]
^if($cID){
	$result[^cID.menu{
		<div>
			<strong><a href="/$cID.uri">$cID.name</a></strong>
			^print[$tree]($cID.dsc)
		</div>
	}]
}