Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] drzewka
Forum PHP.pl > Forum > PHP
kłulik
Chcę zrobić katalog. Mam taką tabelę:

ID|Nazwa|Parent

Parent wskazuje na kategorię nadrzędną. 0 oznacza że kategoria jest kategorią główną.
Ładnie wyświetla mi kategorie główne, podkategorie i linki w kategoriach. Nie umiem zrobić, żeby wyświetlał ścieżkę w postaci:
Główna/Kategoria1/Kategoria2/Kategoria3 itd.

Do wyświetlania kategorii stosuje taki kod:

  1. <?php
  2.  
  3. $id = isset($_GET['id'])?$_GET['id']:0;
  4. $id = (int) $id;
  5. $sql = 'SELECT * FROM `atom_cat` WHERE `parent`='.$id;
  6. $rs = mysql_query($sql);
  7. while($row=mysql_fetch_assoc($rs)) {
  8. echo '
  9. <a href=\"kategoria_'.$row['id'].'.html\">'.$row['nazwa'].'</a>
  10. ';
  11. }
  12.  
  13. ?>
orson
witam ...

musisz to zrobić rekurencyjnie ... tworzysz funkcjie która pobiera za każdym razem nazwę parenta do czasu kiedy parent wynosi 0 ... coś takiego:
  1. <?php
  2.  
  3. function getPath($cat, $array = null){
  4. if ($array != null){
  5.  $SQL = 'SELECT name, catID, parentID FROM cats WHERE parentID = '.$cat.' LIMIT 1';
  6. }else{
  7.  $SQL = 'SELECT name, catID, parentID FROM cats WHERE catID = '.$cat.' LIMIT 1';
  8. }
  9. //if = jeżeli sql nic nic nie zwraca dajesz return $array
  10.  
  11. //obrabiasz wynik (fetchrow/array/itp) i dodajesz do arraya:
  12. $array[] = <wynik zapytania>
  13. $array = getPath(<z wyniku id obecnej kategori>, $array);
  14. }
  15.  
  16. ?>

i jak funkcjia skończy to masz ładnego arraya z kolejnymi kategoriami ... całkowicie z głowy (nie chce mi się szukać na hd) ... to jest zarys ogólny ale taka jest koncepcja ...

pozdrawiam
ActivePlayer
rekurencyjnie jest wolno.


[url]http://www.sitepoint.com/article/hierarchical-data-database[url]
orson
witam ...

dlaczego wolno questionmark.gif moje rozwiązanie jest podstawowym (rozwiązanie typowe dla rekurencyjnego pobierania danych - nie do problemu drzew jako takich, żeby nie było, że jest idealne)... zapytania sql zamieniasz na metodę która z pobranej w konstruktorze jednym zapytaniem zawartości drzewa (bez struktury - tylko id, parentid i może name) przechowywanej w klasie w prostym forze pobiera dzieci ... i już ... bardzo wydajna klasa która ma duże możliwości, jest łatwa do napisania i rozwijania a dane przechowywane są w przejrzysty sposób (można dodawać/ zmieniać dane z "palca") ...

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