Baumstruktur mit MySQL?

Baumstruktur mit MySQL?

am 07.03.2007 11:29:29 von Manuel Reimer

Hallo,

ich möchte ein ganz einfaches CMS aufbauen.

Dieses soll Seiten, die als HTML-Code in einer MySQL-Tabelle vorliegen,
über eine Baumstruktur navigierbar machen.

Wie stellt man sowas am einfachsten an?

Mein erster Gedanke war, dass ich in der Tabelle, die die Seiten
enthält, eine Spalte anlege, welche den Namen der übergeordneten Seiten
enthält.

So müsste also für jede Seite über das GUI des CMS eine übergeordnete
Seite angegeben werden.

Um nun die Navigation aufzubauen, müsste ich also erst mit mehreren
SQL-Abfragen den Baum von der anzuzeigenden Seite nach oben wandern (von
übergeordneter Seite zu übergeordneter Seite) um dann das ganze von oben
nach unten mit weiteren SQL-Abfragen aufzubauen (die Struktur soll ja
bis zur angezeigten Seite "aufgeklappt" erscheinen).

Wie bestimme ich aber die Reihenfolge der einzelnen Seiten? Kennt MySQL
so etwas wie "Füge ein neues Element 'X' vor Element 'Y' ein" oder
"Verschiebe Element 'Z' vor Element 'A'". Ist die Reihenfolge der
Elemente ohne Sortierung überhaupt eindeutig oder wie bekomme ich sie
mit Sortierung eindeutig ohne alle Elemente immer wieder neu zu nummerieren?

Oder bin ich ganz auf dem falschen Weg und die Baumnavigation lässt sich
auf andere Weise viel einfacher umsetzen?

Vielen Dank im Voraus

CU

Manuel

Re: Baumstruktur mit MySQL?

am 07.03.2007 11:41:48 von dev-null-use-reply-adress

Manuel Reimer schrieb:
>
> ich möchte ein ganz einfaches CMS aufbauen.
>
> Dieses soll Seiten, die als HTML-Code in einer MySQL-Tabelle vorliegen,
> über eine Baumstruktur navigierbar machen.
>
> Wie stellt man sowas am einfachsten an?
>
> Mein erster Gedanke war, dass ich in der Tabelle, die die Seiten
> enthält, eine Spalte anlege, welche den Namen der übergeordneten Seiten
> enthält.

Nunja, man nennt so eine Spalte da überlichereise "parent" und trägt
dort aber besser eine eindeutige Referenz, z.B. den Primärschlüssel
des übergeordneten Datensatzes ein. Eine "Namen" würde ich nicht nehmen.

> Um nun die Navigation aufzubauen, müsste ich also erst mit mehreren
> SQL-Abfragen den Baum von der anzuzeigenden Seite nach oben wandern (von
> übergeordneter Seite zu übergeordneter Seite) um dann das ganze von oben
> nach unten mit weiteren SQL-Abfragen aufzubauen (die Struktur soll ja
> bis zur angezeigten Seite "aufgeklappt" erscheinen).

Rekursion ist Dir ein Begriff? Natürlich läuft das auch mehrere Abfragen
hinaus, aber eben rekursiv. Das ist das aber eher ein Problem bei der
Programmierung in der bevorzugten (Script)sprache, als eines der Datenbank.

> Wie bestimme ich aber die Reihenfolge der einzelnen Seiten? Kennt MySQL
> so etwas wie "Füge ein neues Element 'X' vor Element 'Y' ein" oder
> "Verschiebe Element 'Z' vor Element 'A'". Ist die Reihenfolge der
> Elemente ohne Sortierung überhaupt eindeutig oder wie bekomme ich sie
> mit Sortierung eindeutig ohne alle Elemente immer wieder neu zu nummerieren?

Brrr. Natürlich gibt es erstmal keine Reihenfolge in einer DB-Tabelle.
Diese entsteht immer erst durch die Sortierung bei der Abfrage.
Wenn sich keine der vorhandenen Spalten für eine Dir genehme Sortierung
herhalten kann, bleibt Dir halt nur eine extra Spalte für Deine
individuelle Reihenfolge. So etwas dann zu aktualisieren ist dann leider
oft ein Problem. Ein Tipp dafür: Nimm Zahlen und lass immer ausreichen
Abstand. So kannst Du zumindest neue Seiten einfügen, ohne gleich alle
ändern zu müssen.

> Oder bin ich ganz auf dem falschen Weg und die Baumnavigation lässt sich
> auf andere Weise viel einfacher umsetzen?

http://de.wikipedia.org/wiki/Benutzer:Togs/Nested_Set wäre vielleicht
auch etwas für Dich.


Gruß
JPM

Re: Baumstruktur mit MySQL?

am 07.03.2007 11:46:20 von Nick Gerber

Ciao

Ein Ansatz wären 'Nested Sets'.

Sie dazu http://www.php-resource.de/tutorials/read/21/1/

Gruss
Nick


Manuel Reimer wrote:
> Hallo,
>
> ich möchte ein ganz einfaches CMS aufbauen.
>
> Dieses soll Seiten, die als HTML-Code in einer MySQL-Tabelle vorliegen,
> über eine Baumstruktur navigierbar machen.
>
> Wie stellt man sowas am einfachsten an?
>
> Mein erster Gedanke war, dass ich in der Tabelle, die die Seiten
> enthält, eine Spalte anlege, welche den Namen der übergeordneten Seiten
> enthält.
>
> So müsste also für jede Seite über das GUI des CMS eine übergeordnete
> Seite angegeben werden.
>
> Um nun die Navigation aufzubauen, müsste ich also erst mit mehreren
> SQL-Abfragen den Baum von der anzuzeigenden Seite nach oben wandern (von
> übergeordneter Seite zu übergeordneter Seite) um dann das ganze von oben
> nach unten mit weiteren SQL-Abfragen aufzubauen (die Struktur soll ja
> bis zur angezeigten Seite "aufgeklappt" erscheinen).
>
> Wie bestimme ich aber die Reihenfolge der einzelnen Seiten? Kennt MySQL
> so etwas wie "Füge ein neues Element 'X' vor Element 'Y' ein" oder
> "Verschiebe Element 'Z' vor Element 'A'". Ist die Reihenfolge der
> Elemente ohne Sortierung überhaupt eindeutig oder wie bekomme ich sie
> mit Sortierung eindeutig ohne alle Elemente immer wieder neu zu
> nummerieren?
>
> Oder bin ich ganz auf dem falschen Weg und die Baumnavigation lässt sich
> auf andere Weise viel einfacher umsetzen?
>
> Vielen Dank im Voraus
>
> CU
>
> Manuel

Re: Baumstruktur mit MySQL?

am 07.03.2007 12:21:53 von Daniel Fischer

Jens Peter Moeller!

> http://de.wikipedia.org/wiki/Benutzer:Togs/Nested_Set wäre vielleicht
> auch etwas für Dich.

Vielleicht eher http://de.wikipedia.org/wiki/Nested_Sets
Die ist aktueller.

Ich weiss auch nicht, warum man die Benutzer-Seite von Togs zuerst findet...


Gruß
Daniel

Re: Baumstruktur mit MySQL?

am 08.03.2007 08:40:06 von Dirk Ohme

On 7 Mrz., 11:29, Manuel Reimer
wrote:
> ich möchte ein ganz einfaches CMS aufbauen.
> Dieses soll Seiten, die als HTML-Code in einer MySQL-Tabelle vorliegen,
> über eine Baumstruktur navigierbar machen.
> Wie stellt man sowas am einfachsten an?

Ohne Dir jetzt zu nahe treten zu wollen: Wäre es für Dich nicht
günstiger, ein bewährtes Open-Source-CMS-Projekt zu verwenden, welches
vielleicht für Deine Bedürfnisse individuell erweitert werden kann?
Typo-3 fällt mir auf die Schnelle ein, aber ich bin sicher, wenn Du
entsprechend suchst, findest Du da was.

Warum ich das schreibe? Nun, wenn man solche fundamentalen Dinge nicht
weiss, wie man in SQL sortiert, wie man Primärschlüssel-Attribute
definiert, usw., dann hat man zwei Möglichkeiten: (1) Man überlässt es
jemand, der sich damit auskennt. (2) Man versucht zu lernen - aber
auch da ist es nicht schlecht anzuschauen, wie es jemand anderes
gemacht hat. Vielleicht sogar mehrere Produkte anschauen, vergleichen
und dann, wenn man genug weiss, einen eigenen Weg gehen, der durchaus
auch auf einem der vorhandenen Produkte aufsetzen kann.

Gruß, Dirk

Re: Baumstruktur mit MySQL?

am 08.03.2007 13:13:07 von Manuel Reimer

Dirk Ohme schrieb:
> Ohne Dir jetzt zu nahe treten zu wollen: Wäre es für Dich nicht
> günstiger, ein bewährtes Open-Source-CMS-Projekt zu verwenden, welches
> vielleicht für Deine Bedürfnisse individuell erweitert werden kann?
> Typo-3 fällt mir auf die Schnelle ein, aber ich bin sicher, wenn Du
> entsprechend suchst, findest Du da was.

Ich würde mich nicht mit der Programmierung eines eigenen CMS befassen,
wenn ich die vorhandenen Lösungen nicht bereits ausgeschlossen hätte.

Viele der verfügbaren CMS können Seiten in Baumstrukturen organisieren,
aber sie beschränken sich bei weitem nicht auf dieses.

Die meisten Systeme haben noch eine Wagenladung weiterer Features an
Bord und jede weitere Codezeile bedeutet auch weitere Sicherheitslücken.

Ich benötige aber einfach nur ein CMS, welches meine Seiten in eine
Baumstruktur zwängt und ein Single-User-Admin-Interface zum Verwalten
bietet.

CU

Manuel

Re: Baumstruktur mit MySQL?

am 09.03.2007 07:58:48 von Dirk Ohme

On 8 Mrz., 13:13, Manuel Reimer
wrote:
> Viele der verfügbaren CMS können Seiten in Baumstrukturen organisiere=
n,
> aber sie beschränken sich bei weitem nicht auf dieses.

Man muss nicht jedes Feature nutzen.

> Die meisten Systeme haben noch eine Wagenladung weiterer Features an
> Bord und jede weitere Codezeile bedeutet auch weitere Sicherheitslücken.

Nun, ohne Dir jetzt zu Nahe treten zu wollen: Aber warum denkst Du,
machst Du es besser, wenn "die anderen" mehrere Programmierer sind,
länger in dem Geschäft tätig sind und ihre Produkte schon seit einiger
Zeit im Einsatz sind? Es ist doch auch so: Weil diese Produkte längst
über Version 1.0 raus sind, sind gewisse Fehler bereits draussen,
welche in einem neuen Projekt jederzeit wieder entstehen können.

> Ich benötige aber einfach nur ein CMS, welches meine Seiten in eine
> Baumstruktur zwängt und ein Single-User-Admin-Interface zum Verwalten
> bietet.

Was stört Dich bspw. an Typo3? Klar, Du kannst es auch selber
programmieren, das ist Deine Sache. Nur hat mich das, was Du bisher
geschrieben hast, eher zu der Vermutung gebracht, dass Du mit
grundlegenden Kenntnissen auf dem Gebiet eher weniger gesegnet bist.

Gruß, Dirk