Ответ
G_Z 15.04.2016 13:43
Если очень хочется достать готовые адреса, то я бы сделал отдельный метод, который бы возвращал пути указанных узлов:
@getURLs[pages]
$result[^hash::sql{
SELECT t.page_id, GROUP_CONCAT(t.ancestor_id ORDER BY t.distance DESC SEPARATOR '/') AS url
FROM tree AS t
WHERE 1
AND t.page_id IN (^pages.menu{$pages.page_id}[,])
AND t.ancestor_id > 0
GROUP BY t.page_id
}]
Сначала доставал бы дерево, потом адреса всех извлечённых узлов.
Пихать всё в один запрос чревато: во-первых он сложный и его будет трудно читать, во-вторых каждый JOIN, да ещё через связи, множит количество обрабатываемых БД данных, которые потом просто отбрасываются.
Либо, если очень хочется SQL-решения, можно использовать зависимый подзапрос:
SELECT
t.page_id,
p.ancestor_id AS parent_id,
(
SELECT GROUP_CONCAT(u.ancestor_id ORDER BY u.distance DESC SEPARATOR '/')
FROM tree AS u
WHERE 1
AND u.page_id = t.page_id
AND u.ancestor_id > 0
) AS url
FROM tree AS t
JOIN tree AS p ON (p.page_id = t.page_id AND p.distance = 1)
WHERE t.ancestor_id = @node
ORDER BY p.ancestor_id
Однако, смысла в подобном мало, так как дерево строится рекурсивно.
И если данные всегда извлекаются от корня (либо если известна часть пути до узла, выступающего в качестве корня), то достаточно извлечь сегмент адреса каждого узла и при выводе построить полный URL из сегментов.
- Все те же деревья, Mizter Egoist 05.04.2016 12:08
- http://www.parser.ru/forum/?id=82456, G_Z [M] 05.04.2016 15:43
- Ответ, Mizter Egoist 05.04.2016 16:06
- Оффтоп: по поводу sql, 06.04.2016 15:27
- Ответ, G_Z [M] 05.04.2016 16:33 / 05.04.2016 16:34
- Ответ, Mizter Egoist 06.04.2016 14:52
- Ответ, G_Z [M] 06.04.2016 14:58
- Ответ, Mizter Egoist 06.04.2016 17:08
- Ответ, G_Z [M] 06.04.2016 19:10
- Ответ, Mizter Egoist 07.04.2016 09:28 / 07.04.2016 15:02
- Ответ, G_Z [M] 07.04.2016 18:34 / 07.04.2016 18:34
- Ответ, Mizter Egoist 14.04.2016 15:58
- Ответ, G_Z [M] 14.04.2016 16:06
- Ответ, Mizter Egoist 15.04.2016 11:32 / 15.04.2016 11:44
- Ответ, G_Z [M] 15.04.2016 13:43
- Ответ, Mizter Egoist 15.04.2016 14:44 / 15.04.2016 14:46
- Ответ, G_Z [M] 15.04.2016 14:59
- Ответ, Mizter Egoist 15.04.2016 15:20
- Ответ, G_Z [M] 15.04.2016 15:29