![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 24 Pomógł: 0 Dołączył: 4.07.2006 Ostrzeżenie: (0%) ![]() ![]() |
Witam.
http://fungus.teststation.com/~jon/treehan...reeHandling.htm Ma ktoś więcej informacji o tego typu implementacji drzewa w MySQL ? Jak pobrać całe drzewo z wartością zagnieżdżenia każdego elementu ? Pozdrawiam |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 254 Pomógł: 10 Dołączył: 8.11.2006 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Żeby pobrać wszystkie węzły, które znajdują się w poddrzewie węzła o id = 123 wystarczy taka kwerenda :
Jak chcesz dodać do tego wartość zagnieżdżenia (rozumiem, że chodzi Tobie o głębokość) to wystarczy tak :
Problem z tą reprezentacją polega na tym, że brakuje w niej informacji o kolejności węzłów. Można to naturalnie dodać do tabeli data. Ten post edytował prond 19.02.2007, 09:28:11 -------------------- --------------------------------------------------------------------------------
weblog.axent.pl -------------------------------------------------------------------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 24 Pomógł: 0 Dołączył: 4.07.2006 Ostrzeżenie: (0%) ![]() ![]() |
Dziekuje,
Ma ktos pomysl jak pobrac kolejnosc elementow ? Generalnie chodzi mi o to ze chcialbym to wykorzystac do generowania drzewa znacznikami {tree} w nowym opt (1.1.0), w tym celu kolejnosc wezlow jest wymagana. Pozdrawiam |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 254 Pomógł: 10 Dołączył: 8.11.2006 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Dodałbym do tabeli data kolumnę 'weight', w której będą przechowywane informacje o położeniu węzła w gałęzi drzewka.
Teraz zapytanie może wyglądać tak :
-------------------- --------------------------------------------------------------------------------
weblog.axent.pl -------------------------------------------------------------------------------- |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 24 Pomógł: 0 Dołączył: 4.07.2006 Ostrzeżenie: (0%) ![]() ![]() |
To nie jest dobre rozwiązanie ze względu na konieczność przebudowania całej części drzewa pod którą wstawiasz element.
Załóżmy że masz po kolei elementy 1,2,3,4,5 załóżmy że między 2 a 3 chcesz wstawić kolejny, musisz wtedy zmienić poziomy elementów od 3 do końca. Doszliśmy do tego samego problemu co przy 'nested sest', mimo to dziękuję za podrzucenie pomysłu ![]() Ten post edytował astropanic 19.02.2007, 20:05:52 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 254 Pomógł: 10 Dołączył: 8.11.2006 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Jeżeli chcesz mieć komplet informacji (ścieżka, kolejność) o każdym węźle drzewa to nie obejdziesz się bez operacji wymagających przebudowy części lub nawet całości drzewa.
Moim zdaniem nie jest to poważny problem - mając takie narzędzia jak transakcje, procedury składowe i triggery możecie osiągnąć zadowalający efekt. Sam korzystam z drzewka opisanego mniej więcej tak : id | parent_node_id | path 1 | NULL | .1 2 | NULL | .2 3 | 2 | .2.1 Do rozwiązań, które wykorzystują MySQL jest to model jak najbardziej zadowalający. Jego wadą jest naturalnie ograniczenie na głębokość drzewa i ilość jego węzłów narzucane przez długość pola 'path'. Ale tak jak wcześniej napisałem jeżeli przewidywałbym, że będzie tam przechowywane tak duże drzewo nie zdecydowałbym się nigdy na MySQL. Jak tylko znajdę trochę więcej czasu opublikuję tu na forum pełną implementację takiego drzewka (tabele, ograniczenia, procedury, triggery). Ten post edytował prond 20.02.2007, 09:34:35 -------------------- --------------------------------------------------------------------------------
weblog.axent.pl -------------------------------------------------------------------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 18.07.2025 - 00:24 |