![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 15 Pomógł: 0 Dołączył: 20.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witam, bardzo prosze o pomoc. Mam jedna tabele o nazwie schemat_dzialow a w niej 3 pola "id_dzialu", "id_dzialu_nadrzednego" i "nazwa". Wypelnilem rekordy tej tabeli zgodnie ze schematem organizacyjnym, co wyglada mniej wiecej tak:
"id" "id_dzialu_nadrzednego" "nazwa" 1 1 Zarzad 2 1 Dzial1 3 1 Dzial2 19 1 Dzial3 9 1 Dzial4 11 19 Dzial5 12 19 Dzial6 13 19 Dzial7 27 9 Dzial9 28 9 Dzial10 29 9 Dzial11 10 1 Dzial12 7 1 Dzial13 20 7 Dzial14 21 7 Dzial15 22 7 Dzial16 Taki wyglad dzialow przedstawiony w tabeli z nazwa, numerem id i id rodzica nie jest zbyt czytelny dlatego chcialbym narysowac drzewko tej tabeli. Drzewko moze byc narysowane od razu w calosci lub posiadac funkcje zwijania/rozwijania poszczegolnych galezi np znakami + i - na zasadzie np "Dzial13 (+) (-)". Dodam jeszcze ze tabela jest mala, posiada okolo 30 dzialow wiec jakies funkcje zwiekszajace wydajnosc chyba nie sa potrzebne, wystarczy prosta metoda przynajmniej tak mi sie wydaje. Jeszcze raz prosze o pomoc i z gory dziekuje, pozdrawiam. |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 657 Pomógł: 125 Dołączył: 29.04.2006 Ostrzeżenie: (0%) ![]() ![]() |
Robisz prostą funkcję rekurencyjną.
Tak w uproszczeniu - pseudokod (żebyś zrozumiał działanie)
Ten post edytował radex_p 20.06.2008, 07:36:06 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 401 Pomógł: 1 Dołączył: 10.03.2004 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Ten kod powinien Cię zadowolić. Tabela ma strukturę ID, Name, Parent - gdzie ID, to wiadomo, Name to nazwa w Twoim przypadku działu, a Parent, to ID jednostki nadrzędnej (rodzica). Dodaj tylko połączenie z bazą, dopasuj do swoich nazw w tabeli i będzie śmigało, że aż miło. Jak by co, to pisz... |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 15 Pomógł: 0 Dołączył: 20.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witam moja tabela ma strukture id_dzialu, id_dzialu_nadrzednego i nazwa. Dodalem polaczenie z baza, zamienilem wszystkie nazwy na takie jakie wystepuja u mnie (ID na id_dzialu, parent na id_dzialu_nadrzednego, Name na nazwa no i raz w SELECT tabela na schemat_organizacyjny_firmy). Dodam ze moj najwyzszy jedyny rodzic ma id_dzialu=1 i id_dzialu_nadrzednego=1 czyli jes rodzicem sam dla siebie. Dalej dzieci maja np id_dzialu=2 i id_dzialu_nadrzednego=1 itd. Skrypt nie wyrzuca zadnego bledu ale drzewka nie wyswietla (ani niczego innego ). Jeszcze raz prosze o pomoc i z gory dzieki.
Ten post edytował kraks 23.06.2008, 07:03:54 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 36 Pomógł: 2 Dołączył: 3.01.2007 Skąd: Żory Ostrzeżenie: (0%) ![]() ![]() |
Witam
Proponuje dodac kolumne "level" ktora okresla stopien zagnierzdzenia. Przyklad zagnierzdzenia test 1 test 2 1 ---- test 3 2 -------test4 3 itd. Jesli chcesz wyswietlic cale drzewo to pobierasz wszystkie wiersze (sortujac po parentid jak sie nie myle) i lecisz po tablicy wynikowej foreachem. Podczas wyswietlania ustawiasz "padding-left" elementu na ("level elementu" * 20px) i wtedy dostaniesz wciecia. Nie jest tu potrzebna zadna rekurencja. Jesli bedziesz potrzebowall bardziej zaawansowanych operacji na drzewie polecam celkotree (nested set) |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 401 Pomógł: 1 Dołączył: 10.03.2004 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Witaj, daj dla najwyższego poziomu, czyli dla najważniejszego rodzica ID nie 1, tylko NULL, powinno pomóc.
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 15 Pomógł: 0 Dołączył: 20.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
miedzna masz na mysli zamiane jedynki na zero w tej linii $results.=TreeExpand(0,$table,$partable,$Folder,$Page,0,1); na $results.=TreeExpand(0,$table,$partable,$Folder,$Page,0,0); czy gdzie powinienem zmienic wartosc tego rodzica na NULL?
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 401 Pomógł: 1 Dołączył: 10.03.2004 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Nie, w bazie w polu ID dla najwyższego poziomu daj NULL, tylko wtedy skrypt wie, że ta jednostka ma najwyższy poziom.
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 15 Pomógł: 0 Dołączył: 20.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
Czyli w mojej bazie danych w tabeli, gdzie mam najwyzszego rodzica, ktory aktualnie posiada id_dzialu=1 i id_dzialu_nadrzednego=1 mam zmienic na id_dzialu=0 i id_dzialu_nadrzednego=0 tak?
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 401 Pomógł: 1 Dołączył: 10.03.2004 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Masz zmienic na id_dzialu=1 i id_dzialu_nadrzednego=NULL (IMG:http://forum.php.pl/style_emoticons/default/exclamation.gif) !
(IMG:http://forum.php.pl/style_emoticons/default/smile.gif) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 12.10.2025 - 09:26 |