Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]metoda rekurencyjnie - problem
Marr
post 3.08.2009, 08:25:17
Post #1





Grupa: Zarejestrowani
Postów: 103
Pomógł: 1
Dołączył: 19.08.2008
Skąd: Warszawa

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


Witam, mam taką sytuację. W tabeli bazy danych trzymam informacje o departamentach, w kolumnie `parent` trzymam id departamentu "rodzica" , np:

id || name || parent
1 || nadrzedny || null
2 || podrzedny || 1
3 || podrzedny2 || 2

i teraz dla obiektu będącego departamentem pobrać całą ścieżkę rodziców (dla przykladu: dla id 3 powinienem dostać: 2,1), napisałem sobie coś takiego:

  1. <?php
  2. class Departament extends DAO_DAO
  3. {
  4. public $tree;
  5.  
  6. public function buildFamilyTree($childId)
  7.    {
  8.        try
  9.        {    
  10.            $child = Departament::find($childId);
  11.            $parent = Departament::find($childId->parent);
  12.            $tree .= $parent->id.', ';
  13.            $this->buildFamilyTree($parent->id);
  14.            
  15.        }
  16.        catch(DAO_RecordNotFoundException $rnfe)
  17.        {
  18.  
  19.        }
  20.        
  21.    }
  22.    
  23.    public function getTree()
  24.    {
  25.        return $tree;    
  26.    }
  27. }
  28. ?>


oczywiście metoda find zwraca obiekt o zadanym id. Szczerze mówiąc nie wiem co jest nie tak, wydaje mi się to naprawdę nieskomplikowane a jednak nie mogę sobie z tym poradzić. Będę wdzięczny za pomoc.

Ten post edytował Marr 3.08.2009, 08:29:49
Go to the top of the page
+Quote Post
nospor
post 3.08.2009, 08:41:01
Post #2





Grupa: Moderatorzy
Postów: 36 455
Pomógł: 6292
Dołączył: 27.12.2004




pierwsze i podstawowe pytanie: Mozesz jeszcze zmienic strukturę bazy? Jak możesz zrob to jak najszybciej i zamien ją na przyzwoitą strukturę drzewiastą. W necie jest tego trochę. To co tu masz to najgorsza metoda z mozliwych


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
VGT
post 3.08.2009, 08:46:22
Post #3





Grupa: Zarejestrowani
Postów: 63
Pomógł: 9
Dołączył: 19.11.2004
Skąd: Iława

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


w liniach 13 i 26 $tree zmienic na $this->tree

Z tego, co rozumiem, poszukujesz rozwiązania na standardową strukturę danych w postaci drzewa.
Niedawno miałem z tym do czynienia i taki sposob pobierania do ktorego zmierzasz uznalem za niezadowalajacy (coraz wiecej rekurencyjnych zapytan w miare rozrastania sie drzewa).

Zaproponować moge taki link: http://dev.mysql.com/tech-resources/articl...hical-data.html a konkretnie "Nested set model"

Na poczatku moze wydawac sie skomplikowane ale po ogarnieciu okazuje sie bardzo wygodne - wystarczy raz napisac klase z cala funkcjonalnoscia (dodawanie / usuwanie / przemieszczanie / pobieranie dzieci / sciezki rodzicow / subdrzew) i uzywac do woli.

***EDIT
nospor byl szybszy winksmiley.jpg

Ten post edytował Bonastick 3.08.2009, 08:48:46
Go to the top of the page
+Quote Post
Marr
post 3.08.2009, 08:48:48
Post #4





Grupa: Zarejestrowani
Postów: 103
Pomógł: 1
Dołączył: 19.08.2008
Skąd: Warszawa

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


Dzięki za odpowiedzi, w zasadzie przyznam się, że nie pomyślałem, żeby korzystać z jakiś sprawdzonych rozwiązań typu drzewiaste struktury smile.gif Tak czy inaczej dzięki za pomoc, zaraz coś wykombinuje.
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: 24.04.2024 - 11:54