Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL + system szablonów - generowanie drzewa nawigacji], Jak uniknąć rekurencji
astropanic
post
Post #1





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 4.07.2006

Ostrzeżenie: (0%)
-----


Witam wszystkich,
Piszę aplikację w której do nawigacji chciałem skorzystać z dowolnej ilości kategorii i subkategorii. Czyli struktua drzewiasta implementowana za pomocą tabel MySQL - pykuś. Owszem, jeśli się to zrobi w prostacki sposób zakładając tabelę trzykolumnąwą Id, categoryName i parentId. Wtedy żeby wyświetlić drzewo trzeba wykonywać wiele zapytań do bazy co jest szalenie nieefektywne. Znalazłem implementację drzewa w tabelach bazy w inny sposób, lepszy pod względem wydajności, wystarczy bowiem jedno zapytanie. (Tutaj) Tylko teraz mam pytanie, jak przesuwać elementy w drzewie ? Zrozumiale dla mnie jest że należy zmieniać wartości kolumn Left i Right, ale za cieńki jestem z MySQL żeby sensowne zapytanie w tym celu ułożyć.

Bardzo proszę o pomoc, siedziałem nad tym przez święta, ale za nic na świecie mie nie wychodzi.

Pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
astropanic
post
Post #2





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 4.07.2006

Ostrzeżenie: (0%)
-----


Dziękuję, ale chyba nie przeczytałeś dokładnie artykułu.

W implementacji drzewa o której mowa, nie ma kolumny parent.
Są tylko kolumny "left" i "right" wyznaczające pozycję elementu w drzewie.
Gdy wstawiasz pierwszy element do drzewa nadajesz mu wartości left1, right=2.
Gdy wstawiasz drugi element nadajesz mu left=2, right3, pierwszy right poprawiasz na 4.
Gdy wstawiasz trzeci element nadajesz mu left=3, right4, drugi right poprawiasz na 5, a trzeci right na 6. itd.
Teraz chcąc wygenerować drzewo od np stopnia drugiego w głąb, pobierasz wszystkie elementy o left >2 jednym zapytanie,. Możesz również jednym zapytaniem pobrać równocześnie poziom zagnieżdżenia każdego elemetu i tym podobne.

Problem mam w momencie gdy chcę zamienić dane miejscami.

Pozdrawiam
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 9.10.2025 - 05:09