[MySQL] Doppelt verkettete Liste abfragen

fluessig

Royal Blue
Hi,

ich will eine doppelt verkettete Liste in einer Datenbank abspeichern. Das ist ja kein Problem, nur will ich die Liste möglichst einfach wieder abfragen, mit den Daten in der richtigen Reihenfolge. Ich hab schon nach rekursiven Abfragen gesucht/gegoogelt, jedoch nichts brauchbares gefunden.
Code:
Tabellendesign
ID : TEXT : VORGÄNGER_ID : NACHFOLGER_ID
Ich möchte nicht nach einem SELECT ein neues absetzen um die Daten des Nachfolgers zu bekommen. Ich hoffe mein Problem ist verständlich.
 
Sowas hat wirklich noch niemand umgesetzt oder warum meldet sich keiner?

Also meine Idee wäre mit in einer Schleife immer neue Statements zu kreiren und damit zB. einen Array zu füllen. (= Lange Ladezeit beim Aufruf der Seite)

Oder einen zusätzlichen Index anzulegen, der immer beim Speichern immer aktualisiert wird (eventuell sehr lange Speicherzeiten).

Welche Möglichkeit besser ist weiß ich noch nciht. Aber gibt's nichts anderes?
 
Hallo,

ich fürchte fast, dass es eine Deiner beiden Lösungs-Alternativen sein muss (ich persönlich würde Ansatz 1 favorisieren). Nicht nur weil mir selbst nach längerem grübeln nix einfällt, auch die hier anwesende Expertenrunde scheint ratlos...

Sorry,
Martin
 
Was meinst Du genau mit ner doppelt verketteten Liste? Sowas wie n Forum mit verschiedenen Threads?
 
Eine Erläuterung zum Begriff doppelt verkettete Liste:
Nehmen wir dieses Forum. Jedes Posting stellt in meiner Idee einen Eintrag in die DB da. Hier werden die Einträge nach Datum und Uhrzeit sortiert dargestellt, die Beiträge bilden eine Liste, deren Ordnung die Zeit ist.

Ich möchte jetzt etwas ähniches wie ein Forum erstellen. Nur sortiere ich meine Einträge nicht nach dem Datum, sondern der Benutzer selbst darf sagen an welcher Stelle ein Eintrag stehen soll, also zB. zwischen dem dritten und vierten Beitrag. Zu einem späteren Zeitpunkt soll es aber möglich sein, dass der Beitrag auch verschoben werden kann, zB. zwischen den 10ten und 11ten.

Um das umzusetzen merke ich mir zu jedem Beitrag welcher Beitrag vorher und welcher nachher angezeigt werden soll. Man nennt diese Datenstruktur eine doppelt verkettete Liste. Und das Problem, das man bei der Realisierung einer solchen hat siehst du in meinem 2ten Posting oben.

Ich hoffe, dass vielleicht doch noch jemand eine geniale Idee dazu hat. Wäre ein Baum eventuell eine bessere Alternative?
 
Hallo nochmal,

ist ein interessantes Thema. Vielleicht helfen Dir die Beiträge zu "Nested Sets" hier im Forum oder in den Weiten des Netzes weiter (Suche nach 'nested'). Hab mich selbst noch nie so richtig an die Materia rangewagt, das könnte aber in die Richtung deuten.

Eine andere Herangehensweise wäre die Verwendung eines "sortorder"-Feldes. So habe ich das mal gemacht für eine Art ToDo-Liste. Da wollte ich das gleiche haben: Der User sollte die Reihenfolge seiner ToDos selber festlegen können. Habe dazu auch mal eine Frage hier gestellt, hier der entsprechende Thread:
http://www.tutorials.de/forum/showthread.php?s=&threadid=151296

Das ist natürlich keine Lösung für die doppelt verkettete Liste. Wenn das irgendwie funktioniert, dann wäre das wohl erheblich eleganter.

Grüße,
Martin
 
Die nested Sets hab ich mir noch nicht angesehen, jedoch entspricht die Idee mit dem sortorder meinem Vorhaben (das meinte ich mit der zweiten Variante).

Diese ist wahrscheinlich auch die sinnvollere, da das verschieben eines Eintrags mit Sicherheit eine der weniger genutzten Funktionen sein wird. Im Falle eines Sortorderfeldes, kann ich dann auch auf die doppelte Verkettung verzichten.

Edit: Zu den Nested Sets habe ich ein tolles Tutorial gefunden: Baumstrukturen in SQL / Nested Sets
Allerdings ist das etwas übertrieben für mein Vorhaben.
 
Zuletzt bearbeitet:
Nun ja, auf die nested Sets wollte ich eigentlich auch hinaus. Ich denke, dass Du damit wirklich am besten bedient bist. Scheint zwar auf den ersten Blick vielleicht etwas umständlich. Aber es funktioniert bestens und ich finde die Handhabung letzten Endes echt unkompliziert.
 
Na gut, werde mir die Nested Sets nochmal genauer ansehen. Ich denke aber dass man da mit Kanonen auf Spatzen schießt.

Schaden kanns aber nie, wenn man sich etwas mit der Materie beschäftigt.
 
Zurück