Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Rodowód - drzewo genealogiczne
Forum PHP.pl > Forum > Przedszkole
babatunde
Witam mam problem - w sumie nie wiem jak tego dokonać, może jakaś sugestia.
Chciałbym zrobić rodowód, którego tabelka wygląda jak na załączonym obrazku:
Jest to zwykła tabelka htmlowa, wypełniana ma być tak, że najstarsze mają być z prawej strony a najmłodsze z lewej
Zrobilem sobie w bazie tabele z id psa, id ojca, id matki, imieniem i pierwsza sprawa to chciałbym powiązać najmłodszego do rodziców, rodziców do ich rodziców, dziadków do ich rodziców na koniec pradziadków i tu nie za bardzo mam pomysł na to jak pobrać dane z bazy i jak je ulokować w tabelce.
b4rt3kk
Musisz zrobić to rekurencyjnie:
Przy założeniu, że Twoje drzewo nie jest nieskończone, możesz zacząć od rodzica, który nie ma rodzica lub od dziecka które nie ma dziecka. Zacznijmy jednak od rodzica, który nie ma rodzica, czyli dla niego id ojca i id matki będą puste (będzie to pierwszy węzeł). Załóżmy że jego id wynosi 1, teraz szukasz wszystkich dzieci, których id rodzica wynosi 1, jeśli znajdziesz takową osobę (np. o id 17), odpalasz ten sam skrypt, ale teraz na pierwszy węzeł ustalasz 17, skrypt znajduje dzieci, itd. tworząc drzewo rekurencyjnie.

  1. zbuduj_graf($wezel) {
  2. // szukamy wszystkich dzieci dla wezla rekurencyjnie (id rodzica = wezel)
  3. echo $wezel . 'dzieci: ';
  4. if ($id_rodzica == $wezel) zbuduj_graf($id_rodzica);
  5. }
-gohu-
Witam. Przepraszam, że odświeżam temat, ale mam cos baardzo podobnego do zrobienia, konkretnie chodzi własnie mi o system pokazywania rodowodów dla psów. Obliczylem ze potrzebuje az 64 zapytan lecz nie ogarniam jeszcze troche rekurencji smile.gif i wpadlem na pomysl aby zrobic to recznie , recznie napisac te 64 gdzie w formie drzewa zapytanie bedzie pobieralo id_ojca i id_matki od wczesniejszego zapytania itp itd. W jednym zapytaniu pytanie bedzie tylko o 4 wartosci w stylu id_psa, przydomek_psa , id_matki i id_ojca dodatkowo chce wrzucic to w cache. Nie bedzie problemu za taką duża ilościa zapytań ? Czy doszkolic sie i pokombinowac z rekurencja ?smile.gif
Mackos
Gohu, no pomyśl sam, 64 zapytania kontra 4 linijki ;P
To nawet oszczędzasz czas i nerwy.
Pozwól że Ci wyjaśnię najpierw graficznie czym jest rekurencja:

Jest nawet żart że "żeby zrozumieć czym jest rekurencja, musisz rozumieć czym jest rekurencja" czy jakoś tak.
A na podstawie kodu przytoczonego przez b4rt3kk wygląda to tak że w funkcji
zbuduj_graf przechodzisz o stopień niżej/wyżej niż podany jako parametr, jeśli nie napotkałeś na skrajny element to wywołujesz funkcję ponownie.
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.