Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: jedno zapytanie zamiast trzech
Forum PHP.pl > Forum > Przedszkole
Superhero
chciałbym poniższy zestaw pętli oprzeć na jednym zapytaniu do bazy, wydaje mi się to bardziej ekonomiczne i możliwe. niestety moje próby niczego nie dały

  1. <? 
  2.  
  3. $sql = "SELECT * FROM kategorie WHERE level=0"; 
  4. $res = mysql_query($sql); 
  5. while($cat[0] = mysql_fetch_array($res)) 
  6. { 
  7. echo $cat[0]['name'].'<br />'; 
  8. $sql = "SELECT * FROM kategorie WHERE level=1 AND id_rodz=".$cat[0]['id']; 
  9. $res1 = mysql_query($sql); 
  10. while($cat[1] = mysql_fetch_array($res1)) 
  11. { 
  12. echo '-'.$cat[1]['name'].'<br />'; 
  13. $sql = "SELECT * FROM kategorie WHERE level=2 AND id_rodz=".$cat[1]['id']; 
  14. $res2 = mysql_query($sql); 
  15. while($cat[2] = mysql_fetch_array($res2)) 
  16. { 
  17. echo '--'.$cat[2]['name'].'<br />'; 
  18. } 
  19. } 
  20. } 
  21.  
  22. ?>
dtb
jedyno co mi przychodzi do głowy:

  1. <?php
  2. $sql = "SELECT * FROM kategorie"; 
  3. $res = mysql_query($sql); 
  4.  
  5. while($val = mysql_fetch_array($res))
  6. {
  7.   $cat[$val['level']==0 ? 0 : $val['id_rodz']][] = $val['name'];
  8. }
  9.  
  10. foreach ($cat[0] as $k0 => $c0)
  11. {
  12.   echo $c0.'<br/>';
  13.   foreach ($cat[$k0]] as $k1 => $c1)
  14.   {
  15.     echo '-'.$c1.'<br/>';
  16.     foreach ($cat[$k1] as $c2)
  17.     {
  18.       echo '--'.$c2.'<br/>';
  19.     }  
  20.   }
  21. }
  22. ?>


rozwiazanie to jest nienajlepsze poniewaz zapisuje dane z tabeli do tablicy, a dopiero potem je interpretuje - przy duzej ilości danych w tabeli mocno obciązy pamieć serwera zapisujac je do tablicy
Superhero
więc które rozwiązanie jest lepsze? smile.gif
AxZx
a sprawdz to zapytanie:

  1. SELECT kat1.*, kat2.*, kat3.*
  2. FROM kategoria AS kat1
  3. LEFT JOIN kategoria AS kat2 ON (kat2.level=1 AND id_rodz=kat1.id)
  4. LEFT JOIN kategoria AS kat3 ON (kat3.level=2 AND id_rodz=kat2.id)
  5. WHERE kat1.level=0


moze cos z tego bedzie 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.