Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] drzewka
kłulik
post
Post #1





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 27.01.2005
Skąd: Copa Cabana

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


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. ?>
Go to the top of the page
+Quote Post
orson
post
Post #2





Grupa: Zarejestrowani
Postów: 548
Pomógł: 2
Dołączył: 19.07.2003

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


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


--------------------
Computer games don't affect kids; I mean if <span style="font-weight: bold;">Pac Man</span> affected us as kids,we would all be running around in darkened rooms, munching magic pills and listening to repetitive electronic music.
Go to the top of the page
+Quote Post
ActivePlayer
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 1 224
Pomógł: 40
Dołączył: 6.07.2004
Skąd: Wuppertal

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


rekurencyjnie jest wolno.


[url]http://www.sitepoint.com/article/hierarchical-data-database[url]
Go to the top of the page
+Quote Post
orson
post
Post #4





Grupa: Zarejestrowani
Postów: 548
Pomógł: 2
Dołączył: 19.07.2003

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


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


--------------------
Computer games don't affect kids; I mean if <span style="font-weight: bold;">Pac Man</span> affected us as kids,we would all be running around in darkened rooms, munching magic pills and listening to repetitive electronic music.
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 Aktualny czas: 22.08.2025 - 08:37