Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> procedura wyciągająca strukturę drzewiastą, rekurencja w procedurze ?
tomek_
post
Post #1





Grupa: Zarejestrowani
Postów: 40
Pomógł: 4
Dołączył: 6.11.2008
Skąd: Bytom

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


Witam 

mam takie dwie tabelki w bazie

Kod
groups

   id  INT PK      

   groupname VARCHAR

inheritance_group

   group_id    INT // id grupy     

   inherit_id  INT  //  id grupy którą dana grupa dziedziczy


 w innych tabelkach przechowuję uprawnienia dla kazdej z gróp (ale w tej chweili to nieistotne) 

 przykładowe dane w tych tabelkach to 

Kod
groups:

1 grupa1

2 grupa2 

3 grupa3

4 grupa4

itd

a w inheritance_group

3  1

3  2

4  3


czyli każda grupa może dziedziczyć dowolną ilość grup z których każde może także dziedziczyć ich dowolną ilość

potrzebuje teraz napisać procedurę składowaną która wyciągnie mi wszystkie grupy z których dziedziczy grupa podana w parametrze wejściowym (zarówno te bezpośrednio dziedziczone jak i te wyżej w hierarchii
próbowałem już na kilka sposobów ale jakoś nie mogę sobie z tym poradzić. 

potrafię to zrobić za pomocą php-a i procedury wyciągającej tylko te z których bezpośrednio dziedzczy dana grupa ale wolałbym wyciągać to jedną procedurą 

da się to w ogóle osiągnąć za pomocą jednej procedury sql? 

Ten post edytował tomek_ 6.11.2008, 13:56:13
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
osiris
post
Post #2





Grupa: Zarejestrowani
Postów: 121
Pomógł: 15
Dołączył: 19.07.2007

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


http://www.artfulsoftware.com/mysqlbook/sa...sqled1ch20.html
Listing 7c: Recursive edge list subtree in MySQL
Go to the top of the page
+Quote Post
tomek_
post
Post #3





Grupa: Zarejestrowani
Postów: 40
Pomógł: 4
Dołączył: 6.11.2008
Skąd: Bytom

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


dzięki - wprawdzie jeszcze nie próbowałem tego zastosować ale wygląda na to że o coś takieg mi chodziło (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)  







na podstawie tego linka udało mi się napisac odpowiednią procedurę ale pojawił sie problem gdy próbuję ją wywołać.



pojawia mi się taki komunikat

Kod
#1436 - Thread stack overrun:  35600 bytes used of a 131072 byte stack, and 96000 bytes needed.  Use 'mysqld -O thread_stack=#' to specify a bigger stack. 




no to zwiększyłem wartość  thread_stack z 128 do 256 k 

po czym jak wywołuję ponownie procedurę mam 

Kod
#1456 - Recursive limit 25 (as set by the max_sp_recursion_depth variable) was exceeded for routine test 


jak zwiększę max_sp_recursion_depth to znowu wywaa komunikat o za małej wartości thread_stack

Kod
#1436 - Thread stack overrun:  168656 bytes used of a 262144 byte stack, and 96000 bytes needed.  Use 'mysqld -O thread_stack=#' to specify a bigger stack. 


ma ktoś jakiś pomysł jak to rozwiązać - od jakich jeszcze zmiennych to może zależeć ?
Go to the top of the page
+Quote Post
osiris
post
Post #4





Grupa: Zarejestrowani
Postów: 121
Pomógł: 15
Dołączył: 19.07.2007

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


obstawialbym to ze Twoja struktura grup z powodu jakiegos bledu we wprowadzonych danych tworzy cykle, przez co przekraczany jest limit wywolan rekruencyjnych, albo wyczerpuje sie pamiec stosu dla procedur
Go to the top of the page
+Quote Post
tomek_
post
Post #5





Grupa: Zarejestrowani
Postów: 40
Pomógł: 4
Dołączył: 6.11.2008
Skąd: Bytom

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


no rzeczywiście miałem błąd w jednym z zapytań przez co cały czas się wywoływała z tymi samymi parametrami - na szczęscie udało się zlokalizowac problem i już wszystko działa jak należy (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)  

dzięki za pomoc 
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 11.10.2025 - 21:15