Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL + system szablonów - generowanie drzewa nawigacji]
Forum PHP.pl > Forum > Bazy danych > MySQL
astropanic
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
angel2953
Cytat(astropanic @ 27.12.2006, 00:28:35 ) *
[...] 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

Bazując na tym linku co podałeś to powinieneś zmieniać tylko wartość parent ponieważ category_id to unikalny (przynajmniej powinien być) identifikator danej kategorii, więc jak go zmienisz co Ci się całe drzewko rozwali. Elementy przesuwasz zmieniając wartość parent na id kategorii/podkategorii, do której chcesz przenieść dany element.


@astropanic: chyba nie do końca go zrozumiałem. Ale art jest ciekawy
astropanic
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
Denver
Z dodawaniem nowych, usuwaniem i przesuwaniem elementów w takiej strukturze trzeba się trochę pobawić. Najlepiej rozrysuj sobie drzewko przed i po modyfikacji i zobacz, jakie powstają zmiany. Wtedy łatwiej będzie Ci zaprojektować funkcje odpowiedzialne za modyfikowanie struktury Twojego drzewa.

Polecam polski artykuł opisujący to samo zagadnienie autorstwa Tomka Jędrzejewskiego.
astropanic
Naprawdę nie chcę być nieuprzejmy i dziękuję za artykuł, ale on w sumie nic nowego do tematu nie wznosi. Wszystkie te artykuły o drzewach budowanych na kontenerach podają jak dodać, usunąć i robić inne sztuczki z elementami. Ale w żadnym nie znalazłem informacji o którą pytałem. (Przesuwanie elementu. A "rozrysować na kartce" to nie jest rozwiązanie. Napisałem że jestem za cieńki w MySQL żeby napisać takie zapytanie.Nawet z najlepszym rysunkiem na świecie nie jestem w stanie tego zapytania napisać.

Pozdrawiam
kukix
Udało sie komuś rozwiązać ten problem?

Caly ten system drzewek bez możliwości przesuwania gałęzi na nic sie nie zda... cool.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.