Seite 1 von 1

Tabellenbeschreibung zu 'forums'

Verfasst: 05.12.2014 00:17
von wos
Hallo,

kennt jemand einen Link zu Datenbank-Beschreibungen wie z.B. in https://wiki.phpbb.com/Table.phpbb_forums
nur etwas ausführlicher? Ich versuche gerade die Forenhierarchie in der Tabelle forums zu ermitteln, was nicht so einfach zu rekonstruieren ist.
Über die ParentId ist die Zugehörigkeit schon mal einfach zu ermitteln. Aber wie kommt die Reihefolge der Items zustande?
Die Spalten left_id und right_id scheinen mit was verknüpft zu sein, dass sich mir nicht erschließt. Nachbar-Items (Siblings) sind das auf jeden Fall nicht, soweit ich das beurteilen kann.
Mit der Suche konnte ich auch nichts auf die Schnelle finden (immer ca. 250 Suchergebnisse, aber die Schlüsselworte waren auf den ersten Seiten nicht vorhanden).

Gruß
W

Nachtrag: Ich habe eine Struktur zur Sortierung erkannt - die Werte in den Spalten left_id und right_id werden fortlaufend aufsteigend durchnumeriert. Dadurch ergibt sich die Reihenfolge. Das werde ich weiter untersuchen.

Nachtrag2: Ich habs - bspw. Subforen für ein Forum mit der Id 251 in der erwarteten Reihefolge:
select forum_name from forums where parent_id=251 order by left_id, right_id;

Hauptsache, ich habe mal drüber gesprochen und kann damit vielleicht dem weiterhelfen, der das auch mal benötigt :-)

Re: Tabellenbeschreibung zu 'forums'

Verfasst: 05.12.2014 11:30
von gn#36
Vielleicht noch mal zur Erklärung:

Mit den beiden Spalten left_id und right_id wird eine Baumstruktur aufgebaut, die wir ja auch bei den Foren tatsächlich haben. Der Baum ergibt sich, wenn man die Werte, die zwischen left_id und right_id stehen als Kinder des jeweiligen Eintrags auffasst. Wenn also z.B. bei A left_id 1 und right_id 6 ist, dann ist ein Eintrag B mit 2 und 5 ein Kind und ein Eintrag C mit 3 und 4 dessen Kind:

Code: Alles auswählen

A (1,6)
|
B (2,5)
|
C (3,4)
Andersrum wäre bei A (1,6), B (2,3) und C (4,5) A das Elternelement während sowohl B als auch C Kinder von A sind:

Code: Alles auswählen

    A (1,6)
  /    \
B (2,3)  C (4,5)