Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wielowymiarowa tablica, tworzenie nieskończonych podkategorii
matrik
post
Post #1





Grupa: Zarejestrowani
Postów: 115
Pomógł: 2
Dołączył: 23.07.2009

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


Witam
Dosyć prosty problem.

MySQL - dwa istotne pola: id, podkategoria.
PHP - optymalne operowanie

Mój wcześniejszy kod był w ogóle niezoptymalizowany, pętla w pętli poganiała pętle przez pętle (IMG:style_emoticons/default/haha.gif)
Czy istnieje jakaś lepsza metoda utworzenia takiej listy podkategorii podając kategorię startową?

To tak jak by tworzenie drzewa genealogicznego zaczynając od korzeni (IMG:style_emoticons/default/tongue.gif)

Z góry dzięki za pomoc
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
matrik
post
Post #2





Grupa: Zarejestrowani
Postów: 115
Pomógł: 2
Dołączył: 23.07.2009

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


heh, w google szukałem...
sorry własnie znalazłem na forum (IMG:style_emoticons/default/haha.gif)

odsyłam następnych gapowiczów pod link:
Temat: Tree drzewko

Hmm, ten kod jest dosyć rozbudowany, a mi taki nie jest potrzebny.

Kiedyś 'utłukłem' dosyć prosty kod, ale miał soją wadę, ale na swój sposób jest przydatny.
  1. <?
  2. $dzialy = $this->database->pobRows("SELECT * FROM dzialy ORDER BY Listing ASC");
  3. foreach($dzialy as $rowq){
  4. echo "<div style=\"margin: 0 0 4px 0;padding: 10px;background-color:#00CCCC;border: #CCCCCC solid 1px;color:#fff;\">
  5. <table width=\"100%\">
  6. <tr><td><font style=\"font-size: 14px; font-weight: bold;\">".$rowq->nazwa."</font></td></tr>";
  7. $is = $this->database->num_rows("SELECT * FROM kategorie WHERE dzial='".$rowq->id."'");
  8. if($is){
  9. $pod = $this->database->pobRows("SELECT * FROM kategorie WHERE dzial='".$rowq->id."' ORDER BY Listing ASC");
  10. foreach($pod as $rowq_){
  11.  
  12. $ise = $this->database->num_rows("SELECT * FROM kategorie WHERE podkategoria='".$rowq_->id."'");
  13. if(!$ise){echo "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;".$rowq_->nazwa."</td></tr>";}
  14. $is = $this->database->num_rows("SELECT * FROM kategorie WHERE podkategoria='".$rowq_->id."'");
  15. if($is){
  16. echo "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;".$rowq_->nazwa."</td></tr>";
  17.  
  18. $pod_ = $this->database->pobRows("SELECT * FROM kategorie WHERE podkategoria='".$rowq_->id."' ORDER BY Listing ASC");
  19.  
  20. foreach($pod_ as $rowq__){
  21.  
  22. $ise = $this->database->num_rows("SELECT * FROM kategorie WHERE podkategoria='".$rowq__->id."'");
  23. if(!$ise){echo "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;".$rowq__->nazwa."</td></tr>";}
  24. $is = $this->database->num_rows("SELECT * FROM kategorie WHERE podkategoria='".$rowq__->id."'");
  25. if($is){
  26. echo "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;".$rowq__->nazwa."</td></tr>";
  27. $pod__ = $this->database->pobRows("SELECT * FROM kategorie WHERE podkategoria='".$rowq__->id."' ORDER BY Listing ASC");
  28.  
  29. foreach($pod__ as $rowq___){
  30. echo "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;".$rowq___->nazwa."</td></tr>";
  31. }
  32. }
  33. }
  34. }
  35. }
  36. }
  37. echo "</table></div>";
  38. }


Kod ma przedstawiać subkategorie kategorii w forum.
Nie zadawajcie pytań po co mi takie coś (IMG:style_emoticons/default/haha.gif)
Po prostu kod najlepiej utworzyć jedną petlę by się zapętlała przez metodę w klasie, gdy parametr w tablicy będzie pusty to zapętlanie się skończy.
Taką prostą metodą można o wiele więcej zrobić niż tą klasą, którą przedstawił nospor, przynajmniej ja mam takie zdanie.

W metodzie też powinien być kodzik zapisujący cała tablicę, dla cache. Bo nikt nie chce, żeby serwer się zawiesił (IMG:style_emoticons/default/haha.gif)

Ten post edytował matrik 27.01.2011, 22:04:45
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: 8.10.2025 - 16:38