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
crashu
post
Post #2





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 14.04.2007

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


kiedys niepotrzebnie rozwiazlem ten problem

  1. <?php
  2. $db['query'] = 'SELECT * FROM '.CATEGORY_TABLE.' WHERE blog = '.$iBlogID.' ORDER BY sub ASC';
  3. $db->query();
  4. $db->num_rows();
  5.  
  6. if( $db['rows'] < 1 ) return;
  7.  
  8. $kubel = array();
  9. $tree = array();
  10. //Tutaj tworze drzewo
  11. while( $row = $db->fetch_array() ) {
  12.  
  13. $id = $row['id'];
  14.  
  15. $kubel[$id]['id'] = $id;
  16. $kubel[$id]['name'] = $row['name'];
  17. $kubel[$id]['subid'] = $row['sub'];
  18.  
  19. if( !is_array($kubel[$id]['subs']) ) $kubel[$id]['subs'] = array();
  20.  
  21. if( $row['sub'] == 0 ) {
  22.  
  23. array_push($tree, &$kubel[$id]);
  24. }
  25. else {
  26.  
  27. if( !is_array($kubel[$row['sub']]['subs']) )
  28. $kubel[$row['sub']]['subs'] = array();
  29.  
  30. array_push($kubel[$row['sub']]['subs'], &$kubel[$id]);
  31. }
  32. }
  33.  
  34. //zaczynam rysowac
  35. if( count($tree) < 1 ) return '<categories/>';
  36.  
  37. $Stos = array();
  38. $string = '';
  39. reset($tree);
  40.  
  41. $row = @current($tree);
  42.  
  43. while( 1 ) {
  44.  
  45. if( $row == null ) {
  46.  
  47. if( count($Stos) > 1 ) {
  48.  
  49. array_pop($Stos);
  50. $last = array_pop($Stos);
  51. $row = @next($last['subs']);
  52. array_push($Stos, $last);
  53.  
  54. $string .= '</category>'.NL;
  55. if( $row == null ) continue;
  56. }
  57. else if( count($Stos) == 1 ) {
  58.  
  59. $row = array_pop($Stos);
  60. if( count($row['subs']) > 0 )
  61. $string .= '</category>'.NL;
  62.  
  63. $row = null;
  64. if( $row == null ) continue;
  65. }
  66. else {
  67.  
  68. $row = @next($tree);
  69. @reset($row);
  70. if( $row == null ) break;
  71. }
  72. }
  73.  
  74. if( count($row['subs']) > 0 ) {
  75.  
  76. $string .= '<category name="'.$row['name'].'" id="'.$row['id'].'" >'.NL;
  77.  
  78. reset($row['subs']);
  79. array_push($Stos, $row);
  80. $row = current($row['subs']);
  81. continue;
  82. }
  83. else {
  84.  
  85. $string .= '<category name="'.$row['name'].'" id="'.$row['id'].'" />'.NL;
  86.  
  87. if( count($Stos) > 0 ) {
  88.  
  89. $last = array_pop($Stos);
  90. $row = @next($last['subs']);
  91. array_push($Stos, $last);
  92. }
  93. else $row = null;
  94. }
  95. }
  96.  
  97. unset($tree);
  98. unset($kubel);
  99. unset($Stos);
  100.  
  101. echo '<categories>'.NL.$string.NL.'</categories>';
  102. ?>
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: 26.09.2025 - 14:32