![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 141 Pomógł: 1 Dołączył: 2.12.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Opracować musze drzewo o wielokrotnym zagniezdzeniu, jednak mi to nie wychodzi - pewnie z braku wiedzy w dziedzinie php. Mam tabele w takiej formie Id | sub | poziom | pozycja | name 3. | 0 | 0 | 1 | A 2. | 1 | 1 | 1 | B 1. | 2 | 2 | 2 | C 4. | 2 | 2 | 1 | D 5. | 1 | 1 | 1 | E 6. | 0 | 0 | 0 | F Struktura powinna wobec tego wyglądać tak: A. - B -- D -- C - E FRozpisałem sobie taki algorytm Kod for ($i=1; $i<=$rows; $i++){ echo $id[$i]; $t[] = NULL; for ($j=1; $j<=rows; $j++){ if ($sub[$j] == $id[$i] AND $sub[$j] != t[$j]){ for ($k=0; $k<=count($t);$k++){ echo $id[$j]; $t[$j] == $id[$j] } } } } Niestety kod nie działa tak jak zamierzałem, z racji że nie wiem jak zdefiniować te tabele, bo mają pełnić one role taką że jeżeli znajdzie element w pętli J i wyświetli dany element, to ID tego elementu powinno zostać zapisane w BD, by algorytm mógł je pominąc przy kolejnym sprawdzaniu sprawdzaniu. Tylko. Zaś jak przejdzie do inkrementacji I to tabela powinna zostać wyczyszczona. Nie wiem czy dobrze rozumuje, prosiłbym was o pomoc z rozwiązaniem tego, bo sobie nie potrafie z tym dać rady, co do powyższych tabel, to opcjonalnie powinno wystarczyć id i sub alternatywnie poziom określa poziom zagłębienia 0 - główne, 1 -pz pierwszy, 2 - pz drugi itd. W sumie to zależy mi do zagłębienia do poziomu 3, ale jeżeli by realizowało to więcej zagłębień było by bardziej przyszłościowe, bym za pare miesięcy nie musiał się zastanawiać jak 4 poziom czy 5 zrealizować. Ten post edytował xajart 23.01.2009, 11:21:04 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 141 Pomógł: 1 Dołączył: 2.12.2008 Ostrzeżenie: (0%) ![]() ![]() |
niestety zabardzo mi nie pomogła ta wskazówka, musiałbym przebudowywać baze danych a to by było związane również z przebudową serwisu który ją obsługuje. Mogłbym dodać ewentualnie dwie takie kolumny ale wtedy sensu by nie miały te które są dodane.
Poza tym napewno w jakiś sposób da się to rozwiązać, skoro mamy 1 tabele z numerem ID(unikalnym) do którego z drugiej tabeli jest przypisane 0 - co oznacza że nie jest potomkiem i ją wyświetlamy, bierzemy kolejny element jeżeli ma wartość inną niż 0 tzn że jest potomkiem numeru na który wskazuje i go wyświetlić. Do tego momentu mi działą wszystko, tylko kwestia raczej tego jak wyświetlić kolejne pokolenia. skoro mamy tak id | sub | pozycja |name 1 | 0 | 0 | A 2 | 1 | 1 | B 3 | 2 | 2 | C to analogicznie wiemy że: id 1 - jest rodzicem bo nie jest przyporządkowana do id, sub=0 oraz pozycja=0 co znaczy że jest rodzicem id 2 - jest potomkiem id=1 (bo sub=1) oraz wiemy że jest potomkiem 1 poziomu bo pozycja=1 id 3 - jest potomkem id =2 (bo sub=2) oraz wiemy że jest potomkiem 2 poziomu bo pozycja=2 tylko kwestia tego jak to oprogramować by wyświetlić całą strukturę. Wprowadzanie nowych elementów nie stanowi problemu łatwo to określić. Ale wyświetlenie tej struktury, powinno się dać bez problemu (tylko jeszcze do tego etapu nie doszedłem). |
|
|
![]() ![]() |
![]() |
Aktualny czas: 7.10.2025 - 20:57 |