CREATE FUNCTION FILTERGROUP_INSERT_CHILD(FilterID INT UNSIGNED, ParentID INT UNSIGNED, NumID INT UNSIGNED, NodeLine TINYTEXT, NodeCode varchar(100))
RETURNS int(11)
BEGIN
DECLARE v_leftkey INT UNSIGNED DEFAULT '0';
SELECT LB INTO v_leftkey FROM `bd_filter_group` WHERE `ID_FGROUP` = ParentID;
UPDATE `bd_filter_group` SET `RB` = `RB` + 2 WHERE `RB` > v_leftkey;
UPDATE `bd_filter_group` SET `LB` = `LB` + 2 WHERE `LB` > v_leftkey;
INSERT INTO `bd_filter_group` (`INDEX_FILTER`,`NUM`,`LINE`, `LB`, `RB`,`PARENT`,`OPTIONS`) VALUES (FilterID, NumID, NodeLine, v_leftkey + 1, v_leftkey + 2,ParentID,NodeCode);
RETURN LAST_INSERT_ID();
END;
Nested Set Tree
Код:
выводилось с подгрузкой при открытии дочернего, сейчас нужно вывести полностью, использую:
Код:
SELECT
`node`.*,
(COUNT(`parent`.`LINE`) - 1) AS `level`
FROM
`bd_filter_group` AS `node`,
`bd_filter_group` AS `parent`
WHERE
`node`.`INDEX_FILTER`=FilterID AND `parent`.`INDEX_FILTER`=FilterID AND
`node`.`LB` BETWEEN `parent`.`LB` AND `parent`.`RB`
GROUP BY `node`.`LINE`
ORDER BY `node`.`LB`
`node`.*,
(COUNT(`parent`.`LINE`) - 1) AS `level`
FROM
`bd_filter_group` AS `node`,
`bd_filter_group` AS `parent`
WHERE
`node`.`INDEX_FILTER`=FilterID AND `parent`.`INDEX_FILTER`=FilterID AND
`node`.`LB` BETWEEN `parent`.`LB` AND `parent`.`RB`
GROUP BY `node`.`LINE`
ORDER BY `node`.`LB`
но вывод получается наоборот, то есть:
-gr3
-gr2
---gr2.2
---gr2.1
-gr1
что сильно затрудняет работу с ним, подскажите как вывести в верной последовательнсоти?
GROUB BY `node`.`LINE` DESC
ORDER BY `node`.`LB` DESC
ну короче поиграться надо с этим вроде...
получилось вывести правельно когда убрал
ORDER BY `node`.`LB`
нет, это не решение, при большой глубине сбой. есть какие-нибудь идеи?
ех, прикольно, у Joe Celko деревья верх ногами растут, эт я понимаю смартливый в скуле человек... как вывести не придумал, буду инсерт запрос по другому делать :(
GROUP BY `node`.`ID_FGROUP`
ORDER BY `node`.`RB` DESC