Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: rekurencja - wybieranie wielokretne z bazy
Forum PHP.pl > Forum > Przedszkole
krzyszbi
witam
mam następujący problm
mam w bazie zapisanych "konsyltantów" i oni mają miedzi innymi pola takie jak
id_k - identywikator (autoinkrement)
nr_partnera - numer 'tak jaby ojca" osoby od której jest zależny dany człowiek

i teraz potrzebuję wydbac z bazy wszystkich ludzi zależnych od konsultanta z id_k np. 2
tylko że musze wybrać jego "dzieci", "wnuków", "prawnuków', i tak aż nie bedzie co wybierać

mam taki kod ale nie wiem co dalej
wiem że trzeba stwożyc funkceje i urzywać jej rekurencyjnie ale nigdy tego nie robiłem i nie wiem jak coś takkiego przeprowadzić
  1. <?php
  2. $url="localhost";
  3. $uzyt="xxxxx";
  4. $haslo="xxxxxx";
  5. $b_danych="uszki";
  6. @ mysql_connect($url,$uzyt,$haslo) or die ("Nie mozna polaczyc sie z baza danych");
  7. mysql_select_db($b_danych);
  8.  function grupa($id)
  9.  {
  10. $query = "SELECT id_k FROM komsultanci WHERE nr_partnera=".$id;
  11. $result = mysql_query ($query);
  12. $li = @ mysql_num_rows($result);
  13. if ($li>0)
  14. {
  15. $tab = mysql_fetch_array($result);
  16. return $tab;
  17. }
  18. else
  19. {
  20.  return false;
  21. }
  22.  
  23.  }
  24. echo grupa (2); //tu sprawdzam co wraca z funkcki
  25.  
  26. ?>

ta funkcja wybiera tylko dzieci i co mam dalej zrobic
z góry dzięki za pomoc
UDAT
Cytat(krzyszbi @ 2006-01-23 10:20:30)
function grupa($id)
{
$query = "SELECT id_k FROM komsultanci WHERE nr_partnera=".$id;
$result = mysql_query ($query);
$li = @ mysql_num_rows($result);
if ($li>0)
{
$tab = mysql_fetch_array($result);
return $tab;
}
else
{
return false;
}

}
echo grupa (2); //tu sprawdzam co wraca z funkcki

?>

  1. <?php
  2.  function grupa($id)
  3.  {
  4. $query = "SELECT id_k FROM komsultanci WHERE nr_partnera=".$id;
  5. $result = mysql_query ($query);
  6. $li = @ mysql_num_rows($result);
  7. if ($li>0)
  8. {
  9. tmp=array();
  10. while($tab = mysql_fetch_row($result))
  11. {
  12.  grupa(tab['id_k']);
  13.  tmp[]=tab;
  14. }
  15.  
  16.  
  17. return $tmpt;
  18. }
  19. else
  20. {
  21.  return false;
  22. }
  23.  
  24.  }
  25.  
  26. ?>


To powinno działac. Poza tym jak chciałeś wyświetlić tablicę zwykłym echo
krzyszbi
dzieki
działa ale nie za bardzo mi wychodzi jej uzycie
  1. <?php
  2.  
  3.  function grupa($id)
  4.  {
  5. $query = "SELECT * FROM komsultanci WHERE nr_partnera=".$id;
  6. $result = mysql_query ($query);
  7. $li = @ mysql_num_rows($result);
  8. if ($li<>0)
  9. {
  10. while($row = mysql_fetch_row($result))
  11. {
  12. // echo $row[0].'<br />';
  13.  grupa($row[0]);
  14.  $tmp[]=$row[0];
  15. }
  16. return $tmp;
  17. }
  18. else
  19. {
  20.  return false;
  21. }
  22.  
  23.  }
  24.  $tmpt = grupa(2);
  25.  foreach($tmpt as $tmpt)
  26.  // foreach($tmpt as $tmpt)
  27.  echo '<br />'.$tmpt;
  28.  
  29. ?>

coś takiego zwróci - wyświetli mi w petli foreach tylko dwóch potomków a powinno znaleść 4
jak dam jeszcze w funkcji echo $row[0].'<br />'; to wyswietli wszystkich 4
co jest nie tak dalej
lub co źle zmieniłem
UDAT
Sorry zapomniałem dodać $tmp wyniki z wyniku funkcji grupa biggrin.gif
krzyszbi
zmieniłem co nieco i zaczeło działać
oto kod
  1. <?php
  2.  
  3.  function grupa(&$tmp,$id)
  4.  {
  5. $query = "SELECT * FROM komsultanci WHERE nr_partnera=".$id;
  6. $result = mysql_query ($query);
  7. $li = @ mysql_num_rows($result);
  8. if ($li<>0)
  9. {
  10. while($row = mysql_fetch_row($result))
  11. {
  12. array_push($tmp, $row[0]);
  13. grupa($tmp,$row[0]);
  14. }
  15. }
  16. else
  17. {
  18.  return false;
  19. }
  20. return $tmp;
  21.  }
  22.  $tm = array();
  23.  grupa($tm,4);
  24. if ($tm)
  25. {
  26.  sort($tm);
  27.  foreach($tm as $tm)
  28.  echo $tm.'<br />';
  29. }
  30. else echo'Brak';
  31.  
  32. ?>

to działa guitar.gif
ale teraz takie małe pytanko jak ją jeszcze lekko przerobic aby wywoływać ję z jednym parametrem bo obecnie przed kazdym wywołaniem musze zadeklarować pustą tablice do któtej bedą dopisywane dane
z góry dzieki za info
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.