![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarząd Postów: 2 277 Pomógł: 6 Dołączył: 27.12.2002 Skąd: Wołów/Wrocław ![]() |
Postanowiłem pobawić się omawianym już kilkakrotnie systemem tworzenia drzew w bazie (np. http://forum.php.pl/viewtopic.php?t=2625 i http://www.depesz.pl/various-sqltrees.php - 5 sposóB) przy pomocy MySQL.
Początkowo wszystko było ok. Dodawanie pozycji - banalne. Przeglądanie - w te i we wte - również. Jednak trafiłem na problem. Zastanawiam się, jak efektownie usuwać gałęzie. Oczywiście można pobrać dane wszystkich potomków, i w pętli, lub przy pomocy IN usunąć je. Jednak wszyscy mówili, że można to zrobić za pomocą pojedynczych zapytań. No i mam problem (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) Wymyśliłem takie zapytanie Cytat DELETE FROM powiazania
USING powiazania AS p LEFT JOIN powiazania as p2 ON ( p.first_id = p2.second_id ) WHERE p2.first_id = 1 jednak nie działa ono do końca poprawnie, gdyz za szybko usuwa sobie niektóre wiersze, i doprowadza to do tego, że niektóre pozostają. Nie mam również żadnego pomysłu, jak zmontować przenoszenie gałęzi (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) Struktura bazy i przykładowe dane :arrow: http://mstudio.nq.pl/php_pl/inne/test_drzewko.sql |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Przyjaciele php.pl Postów: 1 467 Pomógł: 13 Dołączył: 22.02.2003 Ostrzeżenie: (0%) ![]() ![]() |
Cytat Jak najlepiej dodawać dane do takiej struktury? Używam kluczy obcych. Zrób tak:[sql:1:9935eca99f]INSERT INTO categories( name, parent ) VALUES ( nazwa, id_parenta );
-- wybierasz sobie id tego co włożyłeś dajmy na to do id_current INSERT INTO asociations ( first_id, second_id, depth ) SELECT first_id, id_current, depth + 1 FROM asociations WHERE second_id = id_parenta; INSERT INTO asociations ( first_id, second_id, depth ) VALUES ( id_current, id_current, 0 ); -- jezeli jest zwykłym plikiem i używasz mojego dodatku INSERT INTO files ( id, content ) VALUES ( id_current, text_do_dodania ); -- jeżeli nie jest zwykłym plikiem to już gotowe[/sql:1:9935eca99f]oczywiście musisz podstawić odpowiednie wartości za: nazwa - nazwa nowego pliku/katalogu id_parent - id ojca w gałęzi id_current - musisz je wyciągnąć po dodaniu pierwszego wpisu do bazy[sql:1:9935eca99f]SELECT max( id ) FROM categories;[/sql:1:9935eca99f] text_do_dodania - jeżeli plikiem nie jest plikiem zwykłym to nic, bo nie robisz tego inserta a jeżeli jest to zawartość tego pliku. jakbyś miał jeszcze jakieś pytania to pisz bo właściwie wszystkie operacje mam już tutaj opracowane. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 5.10.2025 - 00:21 |