![]() |
![]() |
![]()
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 |
|
|
![]() |
![]()
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 |
|
|
![]()
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ć ? |
|
|
![]()
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
|
|
|
![]()
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 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 11.10.2025 - 21:15 |