+--------+--------+ | id | parent | +--------+--------+
Ma to spore zalety. Najtrudniejsze jest jednak np. Usuwanie całej gałęzi. Moze się komuś przyda. Proszę też o jakieś komentarze. Dzięki kolejce FIFO pozbyłem się rekurencji. Ograniczyłem też ilość zapytań do bazy do liczby węzłów zawierających dzieci. Tak więc jeśli mamy np kategorie które zawierają dużą ilość artykułów ( Zazwyczaj tak jest, że mamy o wiele mniej kategorii niż artykułów ) to jest to całkiem wydajna metoda. Udało mi się zaimplementować taki algorytm: (Testowałem i działa)

<?php $node_id = 5; //wybieramy jakiś węzeł $parents= new numeric_fifo_queue; //nowa kolejka FIFO $parents->push( $node_id ); //wpisujemy id wezla który chcemy usunąć while( !$parents->is_empty() ) { { $parents->push( $row["id"] ); } } //na koniec usuwamy węzeł o id = $node_id; ?>
Można to jeszcze udoskonalić tak aby pozbyć się końcówki. Wystarczy w zapytaniu do bazy wstawić jedno 'or'. Nie będzie wtedy trzeba pamiętać o 2 różnych miejscach usuwania wpisu:
zapytanie: "SELECT * FROM tree WHERE parent=".$parents->pop() zamieniamy na: "SELECT * FROM tree WHERE parent=".$parents->pop()." OR id=".$node_id i już możemy usunąć ostatnie 'DELETE' query;