Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Drzewka (for BSP)
DeyV
post
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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Jabol
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 467
Pomógł: 13
Dołączył: 22.02.2003

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


Tutaj o kasowaniu gałęzi. Po prostu kasujesz wszystko co ma w first_id id kasownej gałęzi!

Mam taką wizje co do przenoszenia gałęzi (ten typ struktury drzewiastej jest chyba najlepszy, aczkolwiek znam pare łatwiejszych, ale mniej wydajnych, gdzie można to zrobić łatwiej).

Kasujesz wszystkie powiązania gałęzi z elementami zewnętrznymi (nie zawierającymi się w gałęzi).
Zmieniasz w powiązaniach id rodzica (first_id?) dla przenoszonej gałęzi (tylko dla tego katalogu, i nizcego więcej).
Tworzysz powiązania dla wyżej wymienionego katalogu (gałęzi).
Teraz robisz taką sztuczke, dla każdego elementu gałęzi robisz powiązanie w postaci:
Sprawdzasz zagłebienie całej gałęzi (przenoszonej) względem każdego elemntu (zewnętrznego), do którego powiązania ma gałąź (wcześniej robiłeś powiązania dla gałęzi).
Sprawdzasz zagłębienie elemntu (wewnątrz gałęzi), dla którego aktualnie robisz powiązanie względem całej gałęzi (tego nie należy kasować, gdyż to się nie zmienia).
Dodajesz powiąznie, gdzie depth to suma dwóch powyższych liczb.
I tak dla każdego elementu!

Jest to może nizbyt wydajne, ale wydaje mi się przy małej pomocy php całkiem proste do zaimplementowania, a poza tym, w końcu gałęzie przenosie się dość żadko!
Go to the top of the page
+Quote Post

Posty w temacie
- DeyV   Drzewka (for BSP)   30.05.2003, 11:45:07
- - uboottd   Metoda faktycznie jest zaawansowana, ale tez bardz...   30.05.2003, 22:44:52
- - DeyV   1. Wydaje mi się, że dane podane przezemnie są już...   31.05.2003, 13:45:09
- - Jabol   Tutaj o kasowaniu gałęzi. Po prostu kasujesz wszys...   31.05.2003, 15:38:52
- - DeyV   CytatPo prostu kasujesz wszystko co ma w first_id ...   31.05.2003, 22:37:28
- - uboottd   Bez InnoDB moze byc ciezko. KodCREATE TABLE kateg...   2.06.2003, 16:51:22
- - DeyV   Usuwanie - chyba udało mi się wymyślić Przy pomo...   2.06.2003, 20:47:42
- - uboottd   Na pierwszy i drugi rzut oka powinno dzialac. Jedn...   3.06.2003, 10:36:07
- - Jabol   co do dwóch userów, to zawsze mozna zrobic pliki, ...   3.06.2003, 14:45:02
- - Jabol   jak w pgsql'u zastopic konstrukcje KEY, ktora nie ...   10.07.2003, 16:45:10
- - uboottd   CytatSzukaj, Czytaj, a osiągniesz sukces! KEY =...   10.07.2003, 18:00:38
- - Jabol   a skąd jest to pole parent, czy to jest tak, że po...   10.07.2003, 18:02:07
- - uboottd   O i to juz jest dobre pytanie Faktycznie zapomnia...   10.07.2003, 18:05:11
- - Jabol   Po dlozszym zastanowieniu doszlem, ze pliki powinn...   12.07.2003, 19:58:54
- - chfast   Wiem, że temat już stary, ale nie chce zakładać no...   2.11.2003, 00:10:12
- - Jabol   CytatJak najlepiej dodawać dane do takiej struktur...   2.11.2003, 08:47:43
- - chfast   Super! Nie znałem tej konstrukcji: INSERT INTO .....   2.11.2003, 10:27:45
- - Jabol   CytatPrzy okazji: do czego przydaje ci się pole pa...   2.11.2003, 11:04:14
- - chfast   Jeszcze odnośnie dodawania nowego pliku. Wykonuje ...   2.11.2003, 12:24:16
- - Jabol   CytatJeszcze odnośnie dodawania nowego pliku. Wyko...   2.11.2003, 12:34:27
- - chfast   CytatA co to jest za tabela ? - pamiętaj - jeżeli ...   2.11.2003, 17:03:31
- - Jabol   ups... nie korzystasz przypadkiem z jakiejś wersji...   2.11.2003, 18:05:55
- - chfast   Cytatups... nie korzystasz przypadkiem z jakiejś w...   2.11.2003, 18:53:40
- - Jabol   Cytat:?maybe http://postgresql.org ? ja osobiście ...   2.11.2003, 18:59:45
- - chfast   Cytatmaybe http://postgresql.org ? Chętnie. Ale ma...   2.11.2003, 19:13:20
- - Jabol   CytatCytatmaybe http://postgresql.org ? Chętnie. A...   2.11.2003, 19:20:32
- - chfast   Sorry za off-topic, ale robie tak: initdb c:/usr/...   2.11.2003, 21:40:25
- - chfast   Cytat2. nie rozumiem za bardzo o czym mówisz Chodz...   3.11.2003, 16:03:36
- - Jabol   co do pierwszego to może spróbuj najpierw spróbuj ...   3.11.2003, 17:03:23
- - GeoS   Ja ze swojej strony dorzuce jedno pytanie: czy wid...   3.11.2003, 19:41:13
- - chfast   Cytatid_current - musisz je wyciągnąć po dodaniu p...   3.11.2003, 23:25:39


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

 



RSS Aktualny czas: 12.10.2025 - 22:33