Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php][mysql] Wyświetlanie drzewka kategorii, problem przy duuuuzej ilosci kategorii i podkategorii
lectric
post
Post #1





Grupa: Zarejestrowani
Postów: 167
Pomógł: 1
Dołączył: 22.08.2006
Skąd: universe

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


Witam,

Otoz mam tabelke sql:

id | parent_id | name

Kategoria ktora posiada parent_id = 0 to kategoria glowna.

Napisalem dwie funkcje:

  1. <?php
  2. function drzewo($id){
  3.  
  4. global $tab,$glebokosc,$drzewko;
  5. $zapytanie="SELECT * FROM category WHERE parent_id='$id' ORDER BY name ASC";
  6. $wynik=mysql_query($zapytanie);
  7.  
  8. while($wiersz=mysql_fetch_assoc($wynik)) {
  9. $drzewko[]=array('id'=>$wiersz[id],'nazwa'=>$wiersz[name],'glebokosc'=>(int)$glebokosc);
  10.  
  11. $zapytanie2="SELECT * FROM category WHERE parent_id=".$wiersz[id]." ORDER BY name ASC";
  12. $wynik2=mysql_query($zapytanie2);
  13. if(mysql_num_rows($wynik2)>0) {
  14. $glebokosc++;
  15. drzewo($wiersz[id]);
  16. $glebokosc--;
  17. }
  18. }
  19. }
  20.  
  21. function rysuj($ilosc,$nazwa,$id) {
  22.  
  23. if($ilosc == 0 ) {
  24. echo "<option value='$id' style='color:#0086df;'>".$nazwa."</option><br>";
  25.  
  26. }
  27. else {
  28. $licznik = 0;
  29. while($licznik <= $ilosc-1) 
  30. {
  31. $kreska= $kreska." &nbsp;&nbsp;&nbsp;|";
  32. $licznik++;
  33. }
  34. echo "<option value='$id'>".$kreska."__".$nazwa."</option>";
  35. }
  36. }
  37. ?>


wywołanie:

  1. <?php
  2. drzewo(0);
  3. foreach ($drzewko as $tab) 
  4. echo rysuj_zaznaczone($tab[glebokosc],$tab[nazwa],$tab[id],$kat_glowna);
  5. ?>



Gdy testowalem to na kilkunastu kategoriach wszystko bylo ok ale gdy docelowo uzylem okolo 10 tys. kategorii pojawil sie problem...
Testujac to na localhost po chwili wszystko zaczelo sie wieszac.
Prosze Was o pomoc.


--------------------
Potrzebujesz dodać darmowe ogłoszenia ?, w takim razie musisz odwiedzić to miejsce !
Presell - tutaj dodasz swoj artykul za darmo ! Presell Page dla wszystkich bez limitów i utrudnień
Masz firme ? Ta baza firm jest dla Ciebie i Twoich znajomych są też śmieszne filmiki
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Ludvik
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 698
Pomógł: 3
Dołączył: 28.03.2004
Skąd: Wrocław

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


Przy pobieraniu n poziomów możesz pobrać wszystkie dane za pomocą n zapytań, jeżeli dobrze myślę... Pomyśl coś w tym kierunku (pisane z palca, nie testowane, nie gwarantuję poprawnego działania tongue.gif ).

  1. <?php
  2. function drzewo($id, $glebokosc){
  3. $zapytanie = "SELECT * FROM category WHERE parent_id=$id ORDER BY name ASC";
  4. $wynik = mysql_query($zapytanie);
  5.  
  6. $rodzice = array();
  7.  
  8. while ($wiersz = mysql_fetch_array($wynik)) {
  9. $rodzice[] = $wiersz['id'];
  10. $drzewko[] = array('id' => $wiersz[id], 'nazwa' => $wiersz[name],
  11. 'glebokosc' => 0);
  12. }
  13.  
  14. for ($i = 1; $i < $glebokosc; $i++) {
  15.  $rodzice = implode(', ', $rodzice);
  16. $zapytanie = "SELECT * FROM category WHERE parent_id IN (" . $rodzice
  17. . ") ORDER BY name ASC";
  18. $wynik = mysql_query($zapytanie2);
  19. $rodzice = array();
  20. while ($wiersz = mysql_fetch_array($wynik)) {
  21. $rodzice[] = $wiersz['id'];
  22. $drzewko[] = array('id' => $wiersz[id], 'nazwa' => $wiersz[name],
  23. 'glebokosc' => (int)$glebokosc);
  24. }
  25. }  
  26.  
  27. return $drzewko;  
  28. }
  29. ?>


Ten post edytował Ludvik 5.09.2007, 18:10:32


--------------------
Go to the top of the page
+Quote Post

Posty w temacie


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 Aktualny czas: 22.08.2025 - 10:01