Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> jedno zapytanie zamiast trzech
Superhero
post 21.11.2005, 00:41:31
Post #1





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 27.07.2004

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


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. ?>
Go to the top of the page
+Quote Post
dtb
post 21.11.2005, 15:37:04
Post #2





Grupa: Zarejestrowani
Postów: 476
Pomógł: 1
Dołączył: 5.11.2005
Skąd: Bieruń city

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


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

Ten post edytował dtb 21.11.2005, 15:43:24


--------------------
Go to the top of the page
+Quote Post
Superhero
post 21.11.2005, 15:41:55
Post #3





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 27.07.2004

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


więc które rozwiązanie jest lepsze? smile.gif
Go to the top of the page
+Quote Post
AxZx
post 21.11.2005, 17:23:14
Post #4





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

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


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


--------------------
aplikacje internetowe | Symfony
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: 12.06.2025 - 13:27