Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wielowymiarowa tablica, tworzenie nieskończonych podkategorii
Forum PHP.pl > Forum > PHP
matrik
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 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 tongue.gif

Z góry dzięki za pomoc
Crozin
Może byś chociaż udawał, że próbowałeś szukać...
matrik
heh, w google szukałem...
sorry własnie znalazłem na forum 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ś 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ł haha.gif
kto$
Ale po co tak, za każdym razem w kolejnej pętli to samo zapytanie... Weź raz wykonaj zapytanie, przepisz do tablicy, operuj na tablicy. Co do generowania drzewek to masz masę materiałów w google.
kulczycki
Matrik wybacz ale jak mogę zrozumieć funkcję rekurencyjną w kategoriach tak Twojego kodu nie mogę przetrawić.

Cytat
$is = $this->database->num_rows("SELECT * FROM kategorie WHERE podkategoria='".$rowq_->id."'");
if($is){
echo "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;".$rowq_->nazwa."</td></tr>";

$pod_ = $this->database->pobRows("SELECT * FROM kategorie WHERE podkategoria='".$rowq_->id."' ORDER BY Listing ASC");


po co dwa razy te same query ?. Przerób swoją klasę do mysql-a bo to naprawdę jest "niesmaczne" (przepraszam że tak pisze, nie mam na celu atakowanie Ciebie. Ale naprawdę do pewnych rzeczy trzeba podejść poważnie i przemyśleć 1000 razy).

Do tego hm - co zrobisz jeśli będziesz miał np
kategoria
-- sub
----sub sub
------sub sub sub

i dla kategorii chcesz wyliczyć wszystkie wątki/posty z wszystkich subkategorii a nie tylko sub (aktualnie Twój kod tak robi). ?

Temat: phpmysqlsmarty Tworzenie kategorii i podkategorii na jednej tabeli
a jeszcze bardziej wlaśnie klasa nospor-a
posiadacz
Witam,
wg mnie spokojnie można obciążyć modyfikację drzewka na rzecz przyspieszenia odczytu.
Odpowiedziałem na identyczny temat parę dni temu, link poniżej:

http://forum.php.pl/index.php?s=&showt...st&p=830877
JoShiMa
A morze zainteresują Cię drzewa nested set?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.