Krzysztof Z.

Krzysztof Z. Programista PHP/
Webdeveloper

Temat: Nested tree implementacja

Witam,
napisałem klasę do obsługi drzewa w PHP w bazie mam pola:
left, right, level oraz pole visable, które odpowiada za wyświetlanie strony w menu lub nie.

Teraz jak chcę wybrać tylko "widoczne" strony to do zapytania dodaje

WHERE position = true


Wyświetlają się pozycje, ale zostaje zaburzona struktura drzewa, bo sprawdzając, czy dany element posiada drzewo (right - left > 0) dostaje true mimo tego że "dzieci" mają visable ustawione na false co jest normalne.

Moje pytanie jest następujące:

W jaki sposób to obejść nie korzystając z dodatkowego zapytania ?

Może znacie inne optymalne rozwiązanie problemu. Musi być najmniejsza możliwa ilość zapytań do bazy.

Pozdrawiam serdecznie.

Temat: Nested tree implementacja


CREATE TABLE `nested_set` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
`lft` int(10) unsigned NOT NULL,
`rgt` int(10) unsigned NOT NULL,
`depth` int(10) unsigned NOT NULL,
`visible` tinyint(1) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

INSERT INTO `nested_set` (`id`, `name`, `lft`, `rgt`, `depth`, `visible`) VALUES
(1, 'ROOT', 1, 10, 0, 1),
(2, 'cat1', 2, 5, 1, 1),
(3, 'cat1_1', 3, 4, 2, 1),
(4, 'cat2', 6, 9, 1, 1),
(5, 'cat2_2', 7, 8, 2, 1);


zniknięcie aktualnego elementu ('cat1') wraz z podelementami:

UPDATE nested_set
SET visible=0
WHERE lft>=2 AND rgt<=5


wyświetlenie widzialnych elementów dla 'ROOT'a

SELECT c.*
FROM nested_set p
JOIN nested_set c ON c.lft > p.lft AND c.rgt < p.rgt AND c.visible=1
WHERE p.id=1

Następna dyskusja:

drzewo html tree doctrine n...




Wyślij zaproszenie do