Nested Set Baum verschieben?

  • привет,


    может мне кто помочь в [Nested Set] структурах разобраться? в принзипе там новый Кнотен зделать или удалить всё понятьно а вот чтобы ети Ветви двигать туда сюда не могу врубиться?


    может кто так бы расказал что почём или же вот етот код в яву [Programmiersprache Java] перевести?


    очень нужно...


    Einen Teilbaum kann man natьrlich auch innerhalb desselben Baums verschieben:


    create or replace function MoveTree(int4, int4) RETURNS treenode as
    '
    declare
    leftbound int4;
    rightbound int4;
    treeshift int4;
    cwidth int4;
    leftrange int4;
    rightrange int4;
    qn tree%rowtype;
    zn tree%rowtype;
    retval treenode%rowtype;

    begin
    -- Knoten bestimmen
    select id, subtree_id, parent_id, level, l, r into qn from tree where id = $1;
    select id, subtree_id, parent_id, level, l, r into zn from tree where id = $2;

    if qn.l = zn.l then
    raise exception ''Cannot move: entries are identical'';
    end if;

    if qn.id is null then
    raise exception ''Source Node not found'';
    end if;

    if zn.id is null then
    raise exception ''Destination Node not found'';
    end if;

    if zn.l between qn.l and qn.r then
    raise exception ''Cannot move: first entry contains second'';
    end if;

    if qn.l = zn.l + 1 then
    raise notice ''No changes need to be made'';
    end if;

    if qn.subtree_id zn.subtree_id then
    raise exception ''Cannot move between different trees'';
    end if;

    if qn.l > zn.l then
    treeshift := zn.l - qn.l + 1;
    leftbound := zn.l + 1;
    rightbound := qn.l - 1;
    cwidth := qn.r - qn.l + 1;
    leftrange := qn.r;
    rightrange := zn.l;
    else
    treeshift := zn.l - qn.r;
    leftbound := qn.r + 1;
    rightbound := zn.l;
    cwidth := qn.l - qn.r - 1;
    leftrange := zn.l + 1;
    rightrange := qn.l;
    end if;

    -- parent korrigieren
    update tree set parent_id = $2 where id = $1;

    -- Level korrigieren
    update tree set level = level - (qn.level -zn.level - 1) where l >= qn.l and l <= qn.r;

    -- l und r korrigieren
    update tree
    set l = case
    when l between leftbound and rightbound then l + cwidth
    when l between qn.l and qn.r then l + treeshift
    else l end,
    r = case
    when r between leftbound and rightbound then r + cwidth
    when r between qn.l and qn.r then r + treeshift
    else r end
    where subtree_id = zn.subtree_id and (l < leftrange or r > rightrange);

    select id, subtree_id, parent_id, level, payload into retval from tree where id = $1;

    return retval;
    end;
    '
    LANGUAGE 'plpgsql';

  • привет я опять
    насчёт передвигать [Nested Set] вроде разобрался и даже работаэт?!?!


    теперь проблема как можно считывать ети [Baume]?


    zum Beispiel ich habe einen Baum und mehrere Aeste von diesem Baum. Wie kann man z.B. nur Hauptknoten von jedem Ast ausgeben???


    ich brauche dafьr eine SQL-Abfrage fьr MySQL?


    kennt sich jemand da aus?