Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zapisywanie drzewka binarnego
Forum PHP.pl > Forum > PHP
GreenGo
Witam,

chciałbym zapisać w tabeli bazy danych drzewko binarne. Jeśli dobrze rozumiem, to oczywiście w bazie danych wystarczy dodać pole parent_id by wiadomo było jaki jest rodzic danego elementu. Mam tylko problem, jak to zapisać w w bazie danych, mając na w stępie np. 8 elementów. Ogólnie ma to być drabinka rozgrywek pucharowych w piłkę nożną. Tak więc na początek mam 4,8,16... zespołów, losowe zespoły łączę w pary i taka para tworzy "grę", którą chcę zapisać do bazy. Jako iż chcę od razu rozrysować drabinkę całą drabinkę, to muszę od razu zapisać w bazie danych wszystkie gry pomimo, że znam tylko drużyny biorące udział w pierwszej rundzie. Ale skoro chce od razu zapisać wszystkie gry w bazie, to by znać ID rodzica, musze to zacząć robić od gry finałowej... czy dobrze kombinuje? Jakoś ciężko mi rozpisać to na pętle bo chyba każda nowa noga drzewka to musi być nowa pętla, więc ich ilość zależy od ilości drużyn...

  1.  
  2. gra1--
  3. --gra5--
  4. gra2-- |
  5. gra7
  6. gra3-- |
  7. --gra6--
  8. gra4--
  9.  


Będę wdzięczny za rady smile.gif
nospor
Nie lepsza tu bedzie struktura:
ID, CHILD_1, CHILD_2
?

wowczas tworzenie "drzewa" rozpoczynasz normalnie od dolu i nie musisz wybiegac w przyszlosc. Poza tym kazdy element moze miec albo 0 albo 2 dzieci.
Oczywiscie nie wiem co tam jeszcze potem zamierzasz z tym robic, ale na chwile obecna to mi sie wydaje ok
GreenGo
No rzeczywiście zapisywanie dzieci będzie lepsze niż zapisywanie rodzica. Tylko w takim razie pytanie. Mogę obliczyć ilość rund ( poziomów ) w takim drzewku. I pierwsza pęta to będzie pętla po tych właśnie rundach ( dla 8 zawodników będą 3 rundy) a druga pętla będzie iterowała po grach w rundzie ( dla 1 rundy 4 gry, potem 2 i 1 ). Tak więc aby w drugiej rundzie móc nadać ID polom CHILD_1 i CHILD_2, muszę w pierwszej rundzie zbierać do tablicy ID tych dzieci, a następnie je wstawiać przy kolejnej iteracji po rundach. Nie wiem czy ja źle kombinuje czy takie rozwiązanie wydaje mi się po prostu mało "ładne" ale jest prawidłowe ?
nospor
Nie bardzo rozumiem problem.

W pierwszej rundzie ma 4 druzyny to tworzysz 4 rekordy w bazie. Mozesz nawet dodac do tablicy co ci podalem pole RUNDA i tam zapisywac aktualne runde.
Tak wiec pierwsze 4 rekordy nie beda mialy dzieci, ale beda mialy ID i beda mialy ustawione RUNDA na 1
W rundzie 2 wiesz jakie gry wchodza w sklad kolejnych gier z rundy 2 wiec tworzy gru w runda 2 i ustawiasz CHILD1 i CHILD2 na wybrane gry z runda 1
itd
GreenGo
Dzięki, jak to zacząłem pisać to się wszystko wyjaśniło smile.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.