Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SQL][PHP]Drzewo Rekurencyjne, Czy pomógłby mi ktoś w tym?
Weles
post 4.05.2012, 12:34:40
Post #1





Grupa: Zarejestrowani
Postów: 213
Pomógł: 0
Dołączył: 7.07.2011

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


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!

Ten post edytował Weles 4.05.2012, 12:34:52
Go to the top of the page
+Quote Post
!*!
post 4.05.2012, 12:57:01
Post #2





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


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. }


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
Weles
post 4.05.2012, 13:39:46
Post #3





Grupa: Zarejestrowani
Postów: 213
Pomógł: 0
Dołączył: 7.07.2011

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


W czym "$jest_krzak" jest to.. ?
Go to the top of the page
+Quote Post
!*!
post 4.05.2012, 16:03:08
Post #4





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


To po prostu zmienna, którą sprawdzasz czy jest dzieckiem, jeśli tak, wykonujesz funkcje jeszcze raz, jeśli nie, sprawdzasz dalej.


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
kontur
post 4.05.2012, 16:21:48
Post #5





Grupa: Zarejestrowani
Postów: 36
Pomógł: 6
Dołączył: 3.04.2012

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


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;
}

Ten post edytował kontur 4.05.2012, 16:33:07
Go to the top of the page
+Quote Post
Weles
post 4.05.2012, 17:00:16
Post #6





Grupa: Zarejestrowani
Postów: 213
Pomógł: 0
Dołączył: 7.07.2011

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


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..

Ten post edytował Weles 4.05.2012, 17:00:50
Go to the top of the page
+Quote Post
kontur
post 4.05.2012, 17:40:28
Post #7





Grupa: Zarejestrowani
Postów: 36
Pomógł: 6
Dołączył: 3.04.2012

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


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'];
Go to the top of the page
+Quote Post
Weles
post 4.05.2012, 20:22:32
Post #8





Grupa: Zarejestrowani
Postów: 213
Pomógł: 0
Dołączył: 7.07.2011

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


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.
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 Wersja Lo-Fi Aktualny czas: 14.08.2025 - 00:40