Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zapytanie SQL do kategorii i podkategorii ?
Forum PHP.pl > Forum > PHP
mskiba
Witam, mam problem, jak zapętlić poniższe zapytanie?
Nie wiem ile bedzie podkategorii wiec pisanie tego w ten sposob jest bez sensu wink.gif

  1. $query = $connect->query("SELECT * FROM kategorie WHERE parent_id='0'");
  2. while ($row = $query->fetch_assoc())
  3. {
  4. <strong>".$row['categories_name']."</strong> <br>
  5. ";
  6.  
  7. $query2 = $connect->query("SELECT * FROM kategorie WHERE parent_id=".$row['categories_id']."");
  8. while ($row2 = $query2->fetch_assoc())
  9. {
  10. ----- ".$row2['categories_name']." <br>
  11. ";
  12.  
  13.  
  14. $query3 = $connect->query("SELECT * FROM kategorie WHERE parent_id=".$row2['categories_id']."");
  15. while ($row3 = $query3->fetch_assoc())
  16. {
  17. ----- ----- ".$row3['categories_name']." <br>
  18. ";
  19.  
  20.  
  21. $query4 = $connect->query("SELECT * FROM kategorie WHERE parent_id=".$row3['categories_id']."");
  22. while ($row4 = $query4->fetch_assoc())
  23. {
  24. ----- ----- ----- ".$row4['categories_name']." <br>
  25. ";
  26.  
  27. $query5 = $connect->query("SELECT * FROM kategorie WHERE parent_id=".$row4['categories_id']."");
  28. while ($row5 = $query5->fetch_assoc())
  29. {
  30. ----- ----- ----- ----- ".$row5['categories_name']." <br>
  31. ";
  32. }
  33. }
  34. }
  35. }
  36. }
nospor
1) Problem z OOP nie ma zadnego zwiazku. Patrz prosze gdzie piszesz. PRzenosze.
2) Masz o kant 4 liter strukture bazy. W ten sposob zajedziesz baze, skrypt i siebie. Jesli masz mozliwosc to popraw te strukture na specjalną strukture drzewiasta, chcoby na drzewka IP.
crafter
poczytaj o rekurencji. Tu chyba masz jakiś przykład: http://blog-programisty.pl/php/drzewo-kate...ja-rekurencyjna
matix
Źle do tego podchodzisz. Przede wszystkim tworzysz n zapytań, kiedy wystarczy tylko jedno.
To wszystko powinno wyglądać tak:

[SQL]SELECT * FROM kategorie[/SQL[

Następnie tworzysz sobie klasę (odpowiednik encji) która może sie nazywać kategoria:

  1. <?php
  2.  
  3. class Category{
  4. private $id;
  5. private $name;
  6. private $parent;
  7. private $children = array();
  8.  
  9. public function setId($id) {
  10. if (!is_int($id)) {
  11. throw new RuntimeException('ID is not an integer');
  12. }
  13.  
  14. $this->id = $id;
  15. }
  16.  
  17. public function getId() {
  18. return $this->id;
  19. }
  20.  
  21. // Analogicznie dla title, itp, z wyjatkiem:
  22. // metoda setParent(Category $category)
  23. // metoda setChildren(SplObjectStorage $categories)
  24. }


Następnie warto stworzyć Category Managera:

  1. <?php
  2.  
  3. class CategoryManager {
  4.  
  5. private $categoryTree;
  6. public function __construct() {
  7. $this->categoryTree = new SplObjectStorage();
  8. $this->buildCategoryTree();
  9. }
  10.  
  11. public function buildCategoryTree()
  12. {
  13.  
  14. // sortujesz po glebokosci (ustawiajace glebokosc wedlug parent_id np)
  15.  
  16. // do Category tree dodajesz te elementy ktore parent_id maja 0
  17. // do istniajacych parent_id = 0 dodajesz elementy nizej (wedlug parent_id = id)
  18. }
  19. }


Pseudokod pisany z palca, ale tak ja bym to rozwiązał.

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