Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL][PHP]Drzewo Rekurencyjne
Forum PHP.pl > Forum > Przedszkole
Weles
Witam!
W poprzednim moim temacie uzyskałem odpowiedź o drzewo rekurencyjne, jednakże nie potrafię jej zastosować z różnych gotowców z internetu jak i pisząc ją sam.

Dlatego odnoszę się w tym temacie z prośbą o pomoc jak tego dokonać.

Napisałem obecnie taki skrypt:
  1. $_kategorie = mysql_query("SELECT * FROM $baza_forum.dzialy WHERE sub='0'");
  2. if(mysql_num_rows($_kategorie) > 0) {
  3. while($_kat = mysql_fetch_array($_kategorie)) {
  4. echo $_kat['nazwa']; br();
  5. $_podkat = mysql_query("SELECT * FROM $baza_forum.dzialy WHERE sub='$_kat[id]'");
  6. while($_pod = mysql_fetch_array($_podkat)) {
  7. echo '- '.$_pod['nazwa']; br();
  8. $_podpodkat = mysql_query("SELECT * FROM $baza_forum.dzialy WHERE sub='$_pod[id]'");
  9. while($_ppk = mysql_fetch_array($_podpodkat)) {
  10. echo '-- '.$_ppk['nazwa']; br();
  11. }
  12. }
  13. }
  14. }


Jednakże działa on tylko do podkategorii-podkategorii, czyli nie szuka np. podkategorii-podkategorii-podkategorii danej kategorii.

Mój poprzedni temat: Temat: SQLPHPDodanie ilosci watkow z dzialu subdzialow

Czy mógłby mi ktoś z tym pomóc?

Dodam że od wczoraj do teraz ciągle próbowałem to zrobić, jednakże bezskutecznie.

Dziękuję z góry,
Pozdrawiam!
!*!
Rekurencja polega na wczytywaniu tej samej funkcji przez samą siebie. A Ty robisz jakieś dziwolągi.

  1. funkcja()
  2. {
  3. if($jest_krzak)
  4. {
  5. funkcja();
  6. }
  7. }
Weles
W czym "$jest_krzak" jest to.. ?
!*!
To po prostu zmienna, którą sprawdzasz czy jest dzieckiem, jeśli tak, wykonujesz funkcje jeszcze raz, jeśli nie, sprawdzasz dalej.
kontur
Moze tak bedzie latwiej zrozumiec zasade tworzenia:



function znajdz_podkategorie($kategoria)
{

Tutaj wpisujesz kod ktory wyszuka podkategorie i np tworzysz tablice przechowujaca to co potrzebujesz (nazwy, adresy...) powiedzmy ze $wynik

if(znaleziono podkategorie)
{
for(kazda ze znalezionych podkategorii)
{
$wynik.=znajdz_podkategoie($podkategoria)
}
}
return $wynik;
}
Weles
No więc według tego co napisałeś, napisałem kod:

  1. function podkategorie($kategoria) {
  2. $p = mysql_query("SELECT * FROM $baza_forum.dzialy WHERE sub = '".$kategoria."');
  3. $pk = mysql_num_rows($p);
  4. if($pk > 0) {
  5. for($i=0; $i<=$pk; $i++) {
  6. $pa = mysql_fetch_array($p);
  7. $pa_nazwa = $pa['nazwa'];
  8. }
  9. }
  10. return $pa_nazwa;
  11. }
  12.  
  13. echo podkategorie('8');


I zapewne nadal źle zrozumiałem to co pisałeś, ponieważ nie działa..

Tutaj "podkategorie('8')" wpisałem ID jednego z działów do przeszukania..
kontur
Ale nie widze, zeby w tym kodzie bylo rekurencyjne wywolanie funkcji podkategorie()
Powinno sie ono znalesc w petli for i wykonene dla kazdego z juz znalezionych elementow.
Poza tym jesli potrzebujesz liste podkategorii to zapis
$pa_nazwa = $pa['nazwa']; jest bledny, bo funkcja zwroci Ci tylko nazwe uzyskana w ostatniej iteracji petli for zamiast listy wynikow.

Powinno byc:

$pa_nazwa=array(); //gdzies nad petla for

a w petli

$pa_nazwa[] = $pa['nazwa'];
Weles
Heh..
To było wręcz śmieszne, zmienna $baza_forum nie działała bo była w innym pliku, dopiero kolega mnie naprowadził..
Jednak rozumiem tą rekurencje tylko wszystko mi psuła ta zmienna.. teraz na luzie napisałem sobie tą rekurencje i działa..
Dzieki za pomoc.
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.