Anzeige:
Ergebnis 1 bis 8 von 8

Thema: Baumstruktur => pgsql

  1. #1
    Registrierter Benutzer
    Registriert seit
    25.06.2002
    Beiträge
    6

    Baumstruktur => pgsql

    Hallo, ich suche eine Funktion für php, in der ich eine Baumstruktur ähnlich eines Forums abbilden lassen kann.
    Aufgebaut auf pgsql sollte die Seite dann spaeter so aussehen:

    |1
    |-1.1
    |-1.2
    |--1.2.1
    |--1.2.2
    |---1.2.2.1
    |--1.2.3
    |-1.3
    |-1.4

    Hat jemand schonmal so ein script gesehen/geschrieben?

    Vielen dank

    deathcon

  2. #2
    Registrierter Benutzer
    Registriert seit
    24.03.2001
    Ort
    schweiz
    Beiträge
    69
    ein moeglicher loesungsansatz ist das nested set model. es ist v.a. fuer schnelles auslesen aus der datenbank gedacht. das einfuegen von neuen nodes ist ein bisschen komplizierter aber wenn das system einmal steht, ist es kaum uebertreffbar, was die performance angeht ...

    hier ein link dazu: (es gibt viele andere sites dazu -> google)
    http://users.starpower.net/rjhalljr/...Sql/traer.html

  3. #3
    Registrierter Benutzer
    Registriert seit
    11.05.2002
    Ort
    Krefeld
    Beiträge
    17
    Hi

    Hier findest du auch ein sehr gutes howto dazu:
    http://develnet.org/tech/tutorials/3.1.html

    bezieht sich zwar auf mysql sollte aber kein großes problem sein das nach pgsql zu portieren.

    Mfg jensemann
    Hilfe zu LFS Problemen: http://www.lfsforum.org

  4. #4
    Registrierter Benutzer
    Registriert seit
    24.03.2001
    Ort
    schweiz
    Beiträge
    69
    @jensemann:

    genau durch diese howto bin auf dieses modell gestossen ... ist wirklich ein guter artikel (hatte den link leider vergessen)

  5. #5
    Registrierter Benutzer
    Registriert seit
    11.05.2002
    Ort
    Krefeld
    Beiträge
    17
    Hi

    @crac (Junky ? *g* )

    Ich kannte Nested Sets auch erst seit dem Artikel, wenn man es erstmal wirklich verstanden hat ist das sehr mächtig und einfach zu verwenden. Ich werde demnächst anfangen ein CM System Framework mit unter anderem einem Foren Plugin zu schreiben wo ich das nutzen werde, performanter geht es nicht mehr als mit nested sets (zumindest im bereich von mysql und pgsql), allerdings werde ich das in perl schreiben, von php hab ich solangsam die Schnauze voll ...

    Mfg jensemann
    Hilfe zu LFS Problemen: http://www.lfsforum.org

  6. #6
    Registrierter Benutzer
    Registriert seit
    25.06.2002
    Beiträge
    6
    Also ich habs mir durchgelesen, scheint wirklich eine gute Loesung zu sein, aber hab ich mit der Selectabfrage probleme, da ich Postgres verwende und nicht MySQL wie in der Anleitung:

    SELECT node1.payload,
    COUNT(*) AS level

    FROM node AS node1,
    node AS node2

    WHERE node1.root_id = 1
    AND node2.root_id = 1

    AND node1.lft BETWEEN node2.lft AND node2.rgt

    GROUP BY node1.LFT;


    Mein Table sieht so aus:
    Table "faq_cat"
    Column | Type | Modifiers
    ---------+---------+--------------------------------------------------------
    cat_id | integer | not null default nextval('"faq_cat_cat_id_seq"'::text)
    root_id| integer |
    text | text |
    lft | integer |
    rgt | integer |

    die ROOD_ID schreibe ich immer manuell.

    Schonmal danke fuer eure Muehen

  7. #7
    Registrierter Benutzer
    Registriert seit
    24.03.2001
    Ort
    schweiz
    Beiträge
    69
    Original geschrieben von deathcon

    SELECT node1.payload,
    COUNT(*) AS level

    FROM node AS node1,
    node AS node2

    WHERE node1.root_id = 1
    AND node2.root_id = 1

    AND node1.lft BETWEEN node2.lft AND node2.rgt

    GROUP BY node1.LFT;
    ich kenne mich mit postgres nicht aus, aber ich wuerde zumindest mal die werte der abfrage anpasse:

    SELECT node1.text,
    COUNT(*) AS level

    FROM faq_cat AS node1,
    faq_cat AS node2

    WHERE node1.root_id = 1
    AND node2.root_id = 1

    AND node1.lft BETWEEN node2.lft AND node2.rgt

    GROUP BY node1.LFT;

    das fettgeschriebene musst du aendern ... aber sehrwahrscheinlich hast du das sowieso bereits gemacht ...
    Geändert von crac (24-07-2002 um 15:06 Uhr)

  8. #8
    Registrierter Benutzer
    Registriert seit
    25.06.2002
    Beiträge
    6
    test=# SELECT node1.text, COUNT(*) AS level FROM faq_cat AS node1, faq_cat AS node2
    test-# WHERE node1.root_id = 1 AND node2.root_id = 1 AND node1.lft BETWEEN node2.lft AND node2.rgt GROUP BY node1.LFT;
    ERROR: Attribute node1.text must be GROUPed or used in an aggregate function

    funzt net so ganz..

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •