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


phpion.com: Pobranie wszystkich elementów z tej tablicy (10 tys. rekordów) skutecznie zawali pamięć... W ten sposób wszystko można zrobić na jednym zapytaniu, tylko trzeba się potem namęczyć, żeby zapisać wszystkie warunki w postaci kodu (niekoniecznie efektywnego).

Można zastosować nested sets, ale wstawianie i przenoszenie elementów wymaga aktualizacji sporej części rekordów (mimo tego, że nie są to skomplikowane operacje, zwykle 2 zapytania starczają). Pobranie wszystkich elementów podrzędnych jest bardzo proste i wymaga tylko jednego zapytania... Ale tak jak mówiłem, utrzymanie nested sets na takiej dużej bazie nie musi być przyjemne (nie testowałem osobiście...). Na Twoim miejscu przestudiowałbym dokładniej temat drzewek (sam się nad tym męczę)...
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 27.12.2025 - 18:03