Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Drzewo depesza - pobieranie drzewa
acidm
post
Post #1





Grupa: Zarejestrowani
Postów: 110
Pomógł: 3
Dołączył: 12.03.2011
Skąd: Opole

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


Witam !

Zaznajamiam się właśnie z drzewkami w mysql i mam takie pytanie..
Jak za pomocą jednego zapytania pobrac cale drzewo depesza wraz z strukturą w taki sposób aby odtworzyć całą strukturę w php np. do postaci tablicy wielowymiarowej?

Widziałem przykłady na postgressa wykorzystujące funkcje czy procedury do stworzenia struktury w postaci sciezek ale to rozwiązanie nie przypadło mi do gustu.

Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 12)
alegorn
post
Post #2





Grupa: Zarejestrowani
Postów: 341
Pomógł: 40
Dołączył: 23.06.2009

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


wyszukaj na tym forum, wątków o drzewkach, sam w kilku się rozpisywałem, więc wiem że takowe istnieją wink.gif

drzewko, moim skromnym zdaniem trzeba dobierać wg potrzeb, nie ma jednego optymalnego rozwiązania.


j.
Go to the top of the page
+Quote Post
acidm
post
Post #3





Grupa: Zarejestrowani
Postów: 110
Pomógł: 3
Dołączył: 12.03.2011
Skąd: Opole

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


Przegłądałem posty na forum i nie znalazłem w nich odpowiedzi na moje pytanie ...
W wynikach z google widziałem metode depesza która w wyniku końcowym zwracałe strukture drzewek w postaci ścieżki , wiec tak się zastanawiam że zamiast drzewka depesza można by zimplementować drzewko ip...
Lub drzewko depesza w którym można odtworzyć pełną strukturę w php jednym zapytaniem ,jeśli tak się da oczywiście??
Go to the top of the page
+Quote Post
alegorn
post
Post #4





Grupa: Zarejestrowani
Postów: 341
Pomógł: 40
Dołączył: 23.06.2009

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


uf.
Drzewko depesza to takie z parent_id? przedstaw szerzej o czym piszesz.
jeśli tak, to nie ma takiego polecenia sql, które by dało rade za jednym razem wyciągnąć cala ułożoną w strukturę.

jeśli potrzebujesz coś takiego - to drzewa typu nested set. wyciągnięcie posortowanej struktury jednej gałęzi czy całego drzewka jest tam bardzo uproszczone (w zamian masz bardziej skomplikowane wszelkie modyfikacje)

powiedz, co chcesz osiągnąć, a może uda się jakoś bardziej ci podpowiedzieć.

jeśli chodzi Ci tylko o teorie - to ja znam jakieś cztery typy drzewek, każde z nich ma swoje zalety i wady. kwestia umiejętności wybrania odpowiedniego algorytmu, dla konkretnego problemu, ewentualnie niekiedy hybrydy powyższego, ale to już świadomie trzeba się na to decydować.

j.
Go to the top of the page
+Quote Post
acidm
post
Post #5





Grupa: Zarejestrowani
Postów: 110
Pomógł: 3
Dołączył: 12.03.2011
Skąd: Opole

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


Drzewko depesza jest rozdzielone na dwie tabele , pierwsza tabel ma pola id,nazwa a w drugiej tabeli są pola id_rodzica,id_dziecka,głębokość.

Zna ktoś jekieś proste przykłady na odtworzenie struktury calego dzrewka???Najlepiej łopatologiczne bo już zeza dostaje :|
Czy cheć obróbki takiego zapytania na drzewo w php z mojej strony jest wogóle dobrym ppomysłem ??Zastanawiam się czy nie powinna się tym zajmować baza?

A teraz z innej beczki jest możliwość w drzewku IP poukładać strukturę calego drzewa bez uzycia rekurencji odnośnie pola id_parent ?
(drzewko ip o które mi chodzi sklada się z id, nazwy, id_rodzica, ip, głębokości )

PS ogółem potrzebuje drzewka prostego w implementacji i modyfikacji

Ten post edytował acidm 31.01.2013, 11:56:25
Go to the top of the page
+Quote Post
alegorn
post
Post #6





Grupa: Zarejestrowani
Postów: 341
Pomógł: 40
Dołączył: 23.06.2009

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


czyli coś a'la tabela domknięcia. chyba.
ciekawe rozwiązanie, pozwala na użycie jednego elementu w wielu miejscach drzewa, chyba jedyna taka struktura.
ja osobiście nie korzystam z tej struktury ale:

pobranie potomnych dla konkretnego elementu to:
  1. SELECT k.*
  2. FROM komentarze k
  3. JOIN sciezka s ON k.id_komentarza = s.id_child
  4. WHERE s.id_parent =4

to powinno dac ci cala galez drzewa od id 4

w gore to bedzie jakos tak:
  1. SELECT k.*
  2. FROM komentarze k
  3. JOIN sciezka s ON k.id_komentarza = s.id_parent
  4. WHERE s.id_child = 6



dobry opis tego drzewa masz w ksiazce : antywzorce jezyka sql
Go to the top of the page
+Quote Post
acidm
post
Post #7





Grupa: Zarejestrowani
Postów: 110
Pomógł: 3
Dołączył: 12.03.2011
Skąd: Opole

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


hehe to akurat wiem smile.gif

Tylko jak po pobraniu tych wszystkich wezłow potomnych danego elementu odtworzyć strukturę ,tak aby nie wykonywac już węcej zapytan?
Go to the top of the page
+Quote Post
alegorn
post
Post #8





Grupa: Zarejestrowani
Postów: 341
Pomógł: 40
Dołączył: 23.06.2009

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


nie uzywalem tego, wiec nie chce sie wypowiadac.
ale skoro masz lvl i parent_id, to zawsze w php funkcją rekurencyjną jestes wstanie to ogarnac.

Go to the top of the page
+Quote Post
mar1aczi
post
Post #9





Grupa: Zarejestrowani
Postów: 731
Pomógł: 141
Dołączył: 9.05.2011
Skąd: śląskie

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


Coś w ten deseń: http://piotrekkr.info/2009/08/me-vs-tree-c...-w-mysql-i-php/ ?


--------------------
Szanuj innych czas! Kliknij , gdy pomocną wskazówkę otrzymasz.
Go to the top of the page
+Quote Post
alegorn
post
Post #10





Grupa: Zarejestrowani
Postów: 341
Pomógł: 40
Dołączył: 23.06.2009

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


w podanym linku masz hybrydę nested set i metody opartej na parent_id.

coś takiego charakteryzuje się całkiem niezłym pobieraniem drzewa, ale jest dość skomplikowane przy aktualizowaniu.
dla metody z parent_id, nie ma opcji by łatwo wyciągnąć drzewo. chyba, że zakładamy iż drzewko ma np. max 4 poziomy, i więcej ich nie będzie. wtedy da się na sztywno porobic odpowiednią ilość joinow.

j.
Go to the top of the page
+Quote Post
memory
post
Post #11





Grupa: Zarejestrowani
Postów: 616
Pomógł: 84
Dołączył: 29.11.2006
Skąd: bełchatów

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


http://diabl0.gazeta.ie/2009/03/drzewo-dep...ql-ciag-dalszy/

http://4programmers.net/Z_pogranicza/Zaawa..._drzewa_w_MySQL
Go to the top of the page
+Quote Post
alegorn
post
Post #12





Grupa: Zarejestrowani
Postów: 341
Pomógł: 40
Dołączył: 23.06.2009

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


ok, kursory w procedurach - ok, to da rade, ale czy to jest łatwe..?

tak jak pisałem wcześniej, trzeba poznać tych kilka rozwiązań, i świadomie wybierać najlepsze dla konkretnego zadania.
j.
Go to the top of the page
+Quote Post
acidm
post
Post #13





Grupa: Zarejestrowani
Postów: 110
Pomógł: 3
Dołączył: 12.03.2011
Skąd: Opole

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


Cytat(alegorn @ 1.02.2013, 13:48:19 ) *
ok, kursory w procedurach - ok, to da rade, ale czy to jest łatwe..?

Właśnie smile.gif

NestedSets mnie nie interesują (aktualnie , może kiedyśsmile.gif) ale dzieki za linki smile.gif

Tak na marginesie czy funkcje skladwane mogą wyciagac dane z bazy ? Pytam bo jak przerabiam przykladzik
http://diabl0.gazeta.ie/2009/03/drzewo-dep...ql-ciag-dalszy/
to w mysql mi zwraca błąd ?

Pomijając drzewko depesza (najpierw muszę się zaznajomić z procedurami i funkcjami skladowanymi bo jestem z nich zielony :] )
macie może pomysł jak w drzewku ip :
http://www.binboy.org/mysql/articles/575/D..._metoda_IP.html

na wyciągniętych już elegancko danych ,odtworzyc je .Podany tam przyklad stosuje ip do wyciągniecia wezla z potomkami co sprawdza się pieknie:) ale już przetwarzane rekordy sklejane są rekunrencyjnie po id_parent w php ...
W przypadku zagnieżdżeń do 100 jest ok , ale co dalej..
Maci może pomysł jak to zmienić ?
Do dyspozycji sa pola ip, id_rodzica ,id,głębokość.
Może dało by się ułożyć takie drzewko w listy zagnieżdżone prze iteracjęquestionmark.gif?
I jeszcze jedno powiedźcie mi proszę czy jakbym zmienił typ pola ip z CHAR na TEXT to spadek wydajniości byłby znaczny?
Pytam ponieważ pole ip ma typ CHAR a co za tym idzie samo w sobie nie pozwoli na zbyt wiele zagnieżdżeń,więc trzeba by zmienic na typ TEXT ale jeśli to oznacza duży spadek wydajności to trzeba będzie ograniczyć się do pola CHAR->czyli mniejszej ilości zagłebień w drzewie , i wtedy nie ma się co przejmować ograniczeniami rekurencji w php.

Ten post edytował acidm 1.02.2013, 20:27:13
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 19.08.2025 - 21:53