Baumstrukturen und PostgreSQL 8.3

Hallo,

Ich bin gerade abstrakt am nachdenken wie ich eine Baumstruktur
aus einer Messagetable, rekursiv als Baum darstellen kann.

Da ich ja an einem offenen Comunityportal arbeite, habe ich mich natürlich
umgeschaut, wie andere diese Nachrichtendaten in den Posteingängen
darstellen. Was mich dabei wirklich gestört hat, ist die Tatsache, daß
die meisten Inboxes “plain” also Top down auflistungen enthalten.

Beispielsweise so:

Nachricht von: Absender:
Subject 1 Fritz
Subject 1 RE Fritz
Subject 1 Meyer
Subject 1 RE RE: Fritz
Subject 1 Fritz
Subject 1 RE Fritz
Subject 1 Meyer
Subject 1 RE RE: Fritz

Das ist natürlich komplett unübersichtlich und vor allem
sehr performanceintensiv beim SELCT “ROWS” bei jedem
Refreshclick Event.

Ich habe nun zwei Dinge die ich gerne machen würde:
1.Eine Dialogrekonstruktion der Nachrichten in Baumform
2.Ein Zuordnung aller Nachrichten by Sender.
3.Berücksichtigung des Statis der Nachricht
4.Topdown Sortierung wie im FS Explorer von Windows (z.B nach Datum)
5.Suche in den Nachrichten der Inbox

Gibt mir Postgres da irgendwelche nützlichen Mittel an die Hand
um ganze Nachrichtenbäume auszulesen? Eventuell PsSQL?

Hast Du von dort Deine zuweilen hier vorgebrachten Umgangsformen? Sorry, aber das konnt ich mir jetzt grad nicht verkneifen…

umgeschaut, wie andere diese Nachrichtendaten in den Posteingängen
darstellen. Was mich dabei wirklich gestört hat, ist die Tatsache, daß
die meisten Inboxes “plain” also Top down auflistungen enthalten.

Daher nutze ich auch hier übrigens die Baumansicht g.


Gibt mir Postgres da irgendwelche nützlichen Mittel an die Hand
um ganze Nachrichtenbäume auszulesen? Eventuell PsSQL?

Ich weiß nicht, was Du mit PsSQL meinst, aber ich empfehle erst einmal einen Blick in die Doku, z.B. ltree aus Contrib. Weiterhin haben sich bereits andere Leute mit Baustrukturen und SQL im allgemeinen und PostgreSQL im besonderen beschäftigt, Depesz z.B.

Andreas

Daher nutze ich auch hier übrigens die Baumansicht g.
Ich weiß nicht, was Du mit PsSQL meinst, aber ich empfehle erst einmal einen Blick in die Doku, z.B. ltree aus Contrib. Weiterhin haben sich bereits andere Leute mit Baustrukturen und SQL im allgemeinen und PostgreSQL im besonderen beschäftigt, Depesz z.B.

Andreas[/quote]

Hört sich vielversprechend an.Bisher mache ich das so, daß ich
alle Datensätze aus der Message Table lese und pro Datensatz
in einer Instanz der Klasse Kapsel. Die einzelnen Klasseninstanzen
wiederum halte ich in einer Collection vor und gebe dann die ganze
Collection bei HTML out.println / echo() als foreach aus und
caste dynamisch zurück.

Das geht zwar einigermassen fix, allerdings haben die einzelnen
Message Class Instanzen ja keine wirkliche Beziehung zueinander,b.z.w
das eignet sich so nur für eine Topdownausgabe, die ich ja nicht will.

Der Inboxbereich ist mir wirklich sehr wichtig, da es sich gezeigt hat, das
Die User hier 88% Ihrer Zeit verbringen, daher möchte ich Ihnen gerade
hier etwas Komfort bieten. Ich stelle mir einfach die Frage, wie kann
ich die Message Daten so aufbereiten, daß sie einfach und übersichtlich
gekapselt dargestellt werden und mit wenig Aufwand aus der DB gelesen werden können. Ich werde mir auf jeden Fall mal iTree anschauen aus den
Contribs.

  • selektiere was du brauchst - v.a. parent_id der messages (also auf welche message bin ich eine antwort)

  • dann bring der klasse noch bei, “antworten” aufnehmen zu koennen … am besten ein array dass du auch gleich mit der anzahl der antworten initialisieren kannst - warum das geht liest du hier:

  • ueberlege dir wie du die query gestalten musst, damit die datensaetze für deine zauberei guenstig geliefert werden (z.B. ein count ueber antworten joinen)

  • und weiter pragmatisch sein - ueber die id der msg sortieren - auch wenn das nach strenger db-mengenlehre ganz ganz boese ist - sollte die uns guenstig gestimmte wirklichkeit aber die frühesten nachrichten immer am anfang stehen und antworten später … das wesen einer sequence eben … und wenn deine user nicht zaphod beeblebrox heissen sollte es denen niemals nicht gelingen auf eine nachricht zu antworten, die noch nicht existiert :slight_smile:

naja … den rest findest selsbt raus - die gleiche query kannst dann sowohl fuer die eine ansichtsform als auch die andere verwenden