Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wielowymiarowa tablica, tworzenie nieskończonych podkategorii
matrik
post 27.01.2011, 21:54:51
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 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
Go to the top of the page
+Quote Post
Crozin
post 27.01.2011, 22:02:53
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Może byś chociaż udawał, że próbowałeś szukać...
Go to the top of the page
+Quote Post
matrik
post 27.01.2011, 22:58:48
Post #3





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 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

Ten post edytował matrik 27.01.2011, 22:04:45
Go to the top of the page
+Quote Post
kto$
post 27.01.2011, 23:23:10
Post #4





Grupa: Zarejestrowani
Postów: 33
Pomógł: 1
Dołączył: 9.05.2010

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


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.
Go to the top of the page
+Quote Post
kulczycki
post 27.01.2011, 23:36:46
Post #5





Grupa: Zarejestrowani
Postów: 76
Pomógł: 8
Dołączył: 10.11.2010
Skąd: Polska,Katowice

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


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
Go to the top of the page
+Quote Post
posiadacz
post 28.01.2011, 12:49:35
Post #6





Grupa: Zarejestrowani
Postów: 46
Pomógł: 2
Dołączył: 2.04.2009

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


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
Go to the top of the page
+Quote Post
JoShiMa
post 28.01.2011, 14:13:33
Post #7





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

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


A morze zainteresują Cię drzewa nested set?


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

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 Wersja Lo-Fi Aktualny czas: 12.07.2025 - 06:08