Выберите родительский узел во вложенном наборе данных - PullRequest
0 голосов
/ 06 января 2011

Имейте следующий запрос, который хорош и прекрасен ...

SELECT
    `node`.`site_pages_id` AS `page_id` ,
    GROUP_CONCAT(`parent`.`site_pages_id` SEPARATOR '/') AS `path` ,
    IFNULL( CONCAT( '/' , GROUP_CONCAT(`parent`.`url` SEPARATOR '/') ) , '/' ) AS `url`
FROM
    `site_pages` AS `node`
LEFT JOIN
    `site_pages` AS `parent`
ON
    `node`.`lft_limit` BETWEEN `parent`.`lft_limit` AND `parent`.`rgt_limit`
GROUP BY
    `node`.`site_pages_id`
ORDER BY
    `node`.`lft_limit` ASC

производит следующее

1, 1,     /
2, 1/2,   /about-us
8, 1/2/8, /about-us/meet-the-team
3, 1/3,   /web
5, 1/5,   /print
6, 1/6,   /branding
7, 1/7,   /contact-us

Все сладкое.

Я бы хотел выбрать непосредственного родителя и просто непосредственного родителя для каждого узла.

Мои слабые попытки сделать это без неприятного подзапроса терпят неудачу (не намного лучше с TBO).

Советы очень ценятся

1 Ответ

0 голосов
/ 10 января 2011

Никаких проб Мартин ...

page_id url            lft_limit   rgt_limit
1,      NULL,          1,          14,
2,      about-us,      2,          5,
3,      web,           6,          7,
5,      print,         8,          9,
6,      branding,      10,         11,
7,      contact-us,    12,         13,
8,      meet-the-team, 3,          4,
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...