Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Ocena rozwiązania
adam882
post 5.02.2012, 10:43:41
Post #1





Grupa: Zarejestrowani
Postów: 289
Pomógł: 1
Dołączył: 2.11.2007

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


Witam

Chcę w swoim serwisie internetowym system kategorii 3 rzędu (tzn. wybieramy najpierw 1, potem 2, a na końcu 3). Na początku chcę przypisać do 3 zmiennych listę kategorii 1, 2 i 3 rzędu w postaci tablicy (aby później ewentualnie wrzucić to w cache), a następnie przy pomocy pętli sprawdzać, czy się zawierają.

Struktura tabeli z kategoriami
id | parent | parent2 | nazwa | seonazwa | ile

  1. //Kategorie główne
  2. $kategorie1=array();
  3. $q1=mysql_query('SELECT id, nazwa FROM kategorie WHERE parent=0 AND parent2=0 ORDER BY seonazwa ASC');
  4. if(mysql_num_rows($q1)>0)
  5. {
  6. while($r1=mysql_fetch_assoc($q1))
  7. {
  8. $kategorie1[]=$r1;
  9. }
  10. }
  11. ////////
  12.  
  13. //Podkategorie pierwsze
  14. $kategorie2=array();
  15. $q1=mysql_query('SELECT id, nazwa, parent FROM kategorie WHERE parent<>0 AND parent2=0 ORDER BY seonazwa ASC');
  16. if(mysql_num_rows($q1)>0)
  17. {
  18. while($r2=mysql_fetch_assoc($q1))
  19. {
  20. $kategorie2[]=$r2;
  21. }
  22. }
  23. ///
  24.  
  25. //Podkategorie trzecie
  26. $kategorie3=array();
  27. $q1=mysql_query('SELECT id, nazwa, parent2 FROM kategorie WHERE parent<>0 AND parent2<>0 ORDER BY seonazwa ASC');
  28. if(mysql_num_rows($q1)>0)
  29. {
  30. while($r3=mysql_fetch_assoc($q1))
  31. {
  32. $kategorie3[]=$r3;
  33. }
  34. }
  35. ///
  36. for($x=0; $x<count($kategorie1); $x++)
  37. {
  38. echo '<b>'.$kategorie1[$x]['nazwa'].'</b><br />'; //kategoria główna
  39. for($y=0; $y<count($kategorie2); $y++)
  40. {
  41. if($kategorie1[$x]['id']==$kategorie2[$y]['parent'])
  42. {
  43. echo '-> '.$kategorie2[$y]['nazwa'].'<br />'; //podkategorie pierwszego rzędu
  44.  
  45. for($z=0; $z<count($kategorie3);$z++)
  46. {
  47. if($kategorie2[$y]['id']==$kategorie3[$z]['parent2'])
  48. {
  49. echo '---> '.$kategorie3[$z]['nazwa'].'<br />'; //podkategoria drugiego rzędu
  50. }
  51. }
  52.  
  53. }
  54. }
  55. }
  56. ///

Wszystko niby działa i generuje wynik mniej więcej w takiej postaci:

Kategoria_glowna_1
-> Podkategoria_pierwsza1
---> Podkategoria_druga1
---> Podkategoria_druga2
-> Podkategoria_pierwsza2
-> Podkategoria_pierwsza3
Kategoria_glowna_2
Kategoria_glowna_3


Jednak zastanawia mnie, czy nie za bardzo przekombinowałem z pętlami i czy takie rozwiązanie wydaje się optymalne.
Go to the top of the page
+Quote Post

Posty w temacie


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: 14.08.2025 - 10:03