ďťż
 
drzewka sql metoda 5 faq ďťż
 
drzewka sql metoda 5 faq
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

drzewka sql metoda 5 faq



Acid - 03-02-2006 09:53
drzewka sql metoda 5 faq
  Witam
po raz kolejny poryszam temacik bo siedze nad tym i siedze i nie moge dojsc
do rozwiazania
musze napisac funkcje ktora zmienia rodzica w drzewie, po prostu np cale
drzewo uzytkownika 3 (wlacznie z nim) przenosi pod usera numer 8

napisalem taka funkcje:
CREATE OR REPLACE FUNCTION cheange_parent(int8, int8)
RETURNS text AS
$BODY$declare
temprec record;
person ALIAS FOR $1;
new_parent ALIAS FOR $2;
BEGIN
CREATE TEMPORARY TABLE olds(
parent_id int8,
child_id int8,
depth int8
);
INSERT INTO olds SELECT * FROM temida_connections WHERE parent_id IN(SELECT
child_id FROM temida_connections WHERE parent_id =person ORDER BY depth) AND
depth = 1;
DELETE FROM temida_connections WHERE parent_id = person OR child_id =
person;
DELETE FROM temida_connections WHERE parent_id IN (SELECT child_id FROM
olds) OR child_id IN (SELECT child_id FROM olds);
INSERT INTO temida_connections VALUES(person, person, 0);
INSERT INTO temida_connections VALUES(new_parent, person, 1);
INSERT INTO temida_connections
SELECT parent_id, person, depth + 1 FROM temida_connections WHERE child_id
= new_parent AND depth > 0;
FOR temprec IN SELECT * FROM olds LOOP
INSERT INTO temida_connections
VALUES(temprec.child_id,temprec.child_id,0);
INSERT INTO temida_connections VALUES(temprec.parent_id, temprec.child_id,
1);
INSERT INTO temida_connections
SELECT parent_id, temprec.child_id, depth + 1 FROM temida_connections
WHERE child_id = temprec.parent_id AND depth > 0;
END LOOP;
RETURN NULL;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
dziala tylko na malej licznie danych, przy wiekszej ilosc sie gubi, po walce
dluzszej z tym doszedlem do wniosku ze powodem bledu jest ten fragment
CREATE TEMPORARY TABLE olds(
parent_id int8,
child_id int8,
depth int8
);

INSERT INTO olds SELECT * FROM temida_connections WHERE parent_id IN(SELECT
child_id FROM temida_connections WHERE parent_id =person ORDER BY depth) AND
depth = 1;
tzn Tym select + insert wybieram dane posortowane w kolejnosci jakiej
powinny byc pozniej dodawane do bazy lecz w tym miejscu
FOR temprec IN SELECT * FROM olds LOOP
dane wybreane juz sa raczej z losowym posortowaniem, a nie ma tutaj ich czym
posortowac no i pozniej sa problemy bo f-cja probuje dodac dzieci do nie
zapisanych jeszcze rodzicow....
z gory dziekuje za pomoc, moje wszelkie pomysly zostaly juz wyczerpane a
siedze nad tym juz kilka dobrych dni.





baklarz - 22-02-2006 21:48

  Dnia 30.01.2006 Acid <skas@gdzies.pl> napisał/a:
> Witam
> po raz kolejny poryszam temacik bo siedze nad tym i siedze i nie moge dojsc
> do rozwiazania
> musze napisac funkcje ktora zmienia rodzica w drzewie, po prostu np cale
> drzewo uzytkownika 3 (wlacznie z nim) przenosi pod usera numer 8

up,down,depth
1 , 1 ,0
27 ,27 ,0
1 ,27 ,1
28 ,28 ,0
1 ,28 ,1
122,122 ,0
27 ,122 ,1
1 ,122 ,2
123,123 ,0
27 ,123 ,1
1 ,123 ,2
170,170 ,0
28 ,170 ,1
1 ,179 ,2

Przenosimy 28 do 27

Zapamiętujemy gdzieś id do skasowania.
Wybieramy takim zapytaniem.

SELECT
c2c_up.id
FROM
c2c_depth c2c_c
INNER JOIN
c2c_depth c2c_up
ON
c2c_c.up=c2c_up.up
WHERE
c2c_c.down=28 AND c2c_c.depth>0
AND c2c_up.down IN
( SELECT down FROM c2c_depth WHERE up=28 AND depth>0)

Wstawiamy tam gdzie trzeba
INSERT INTO c2c_depth ...
SELECT
c2c.up
,c2c_c.down
,c2c.depth+c2c_c.depth+1
FROM
c2c_depth c2c
,c2c_depth c2c_c
WHERE
c2c.down=27 AND c2c_c.up=28;

Kasujemy zapamiętane id ( pierwsze zapytanie).

Koniec.

--
Tomasz Drobiszewski
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    jak to =?ISO-8859-2?Q?zrobi=E6=2E=2E=2E=3F_TSQL_sql_server?==?ISO-8859-2?Q?_?= Jak =?windows-1250?Q?pobra=E6_szacowan=B9_wielko=9C=E6_zbiory_wy nikowego_w_MS?==?windows-1250?Q?_SQL_2005=3F?= =?iso-8859-2?Q?=5BMS_SQL=5D_Czy_mo=BFna_wywo=B3a=E6_funkcje_t ylko_raz_dla?==?iso-8859-2?Q?_ca=B3ego_zbioru_=BCr=F3d=B3owego=3F?= [MSSQL] =?ISO-8859-2?Q?zgodno=B6ci_z_licencjami_Microsoft_?==?ISO-8859-2?Q?SQL_Server?= =?ISO-8859-2?Q?k=B3opot_z_uruchomieniem_MY_SQL_dla_C?==?ISO-8859-2?Q?MS_i_CRM_na_Fedora_Core_3?= Oracle PL/SQL Wstawianie =?ISO-8859-2?Q?wynik=F3w_kolekcji_d?==?ISO-8859-2?Q?o_tabeli?= [MSSQL] ACCESS - SQL =?ISO-8859-2?Q?B=B3ad_w_konwersji_lic?==?ISO-8859-2?Q?zb?= =?iso-8859-2?Q?=5Bmssql=5D_Zapytania_rekurencyjne__-_czy_sk=B3adnia_sql?==?iso-8859-2?Q?_co=B6_takiego_przewiduje_=3F?= [Oracle PL/SQL] Cursor i zapis =?ISO-8859-2?Q?rekord=F3w_do_?==?ISO-8859-2?Q?kolejnych_plik=F3w?= =?iso-8859-2?Q?=5BMySQL=5D_Co_minimalnie_potrzebne_zeby_mie=E 6_klienta_My?==?iso-8859-2?Q?SQL_na_Linuxie=3F?=
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • red-hacjenda.opx.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com