Was ist die beste Methode, verschachtelte Diskussionen über mehrere Seiten zu trennen - für Web-Anwendung?

StackOverflow https://stackoverflow.com/questions/582315

Frage

Ich bin ein Gewindenachrichtenanzeige für eine PHP / MySQL Entwicklung neuer Anwendungen - wie Kommentare auf Slashdot oder Youtube - und frage mich, wie ich über die Bestellung der Kommentare gehen sollte und sie in die Seiten zu trennen, so dass Sie können, sagen wir, 20 Kommentare auf eine Seite, aber noch haben sie verschachtelt sind.

Kommentare in meiner App können beliebig viele Ebene verschachtelt werden, und diese Struktur dargestellt wird, mit was ich glaube, ist ein Adjazenzrelation Tisch, eine separate Tabelle eine Zeile für jedes Paar, die jegliches ascendent / Nachkommen Beziehung hat. Das Beziehungstabelle hat CHILDID, PARENTID und LEVEL, wo ein Wert von 2 bedeutet „Urgroßeltern“, und so weiter.

Meine Frage ist eine der beide Benutzerfreundlichkeit für den Endanwender, und die Praktikabilität einer effiziente DB Abfrage zu konstruieren. Ich habe diese Optionen in Betracht gezogen:

  • Splitting Ergebnisse in Seiten nach Datum, unabhängig von ihrer Position im Baum, so dass alle Kommentare innerhalb eines bestimmten Datumsbereich erscheint zusammen, auch wenn sie nicht mit ihren Eltern erscheinen. Jeder Kommentar, der zu einem ähnlichen Zeitpunkt seiner Eltern geschrieben wurde, wird auf der gleichen Seite erscheinen und in diesen Fällen wir sie angezeigt werden können ‚verschachtelt‘, aber es wird Kommentare, die von ihren Eltern zu Waisen werden. Dies ist wahrscheinlich akzeptabel - es ist die Art und Weise Dinge in YouTube Kommentare gemacht werden - eine Bemerkung gemacht viel später als ihre Eltern auf der gleichen Seite nicht als ihre Mutter erscheinen wird (wenn die Eltern nicht auf dem neuesten Seite ist), sondern erscheinen mit die anderen neuesten Kommentare.

  • Das Abrufen der Knoten, um wie Sie einen Baum durchqueren würde. Dies gibt Priorität auf die Baumstruktur eher als das Datum, obwohl Geschwister noch nach Datum sortiert werden kann. Der Vorteil dabei ist, dass Antworten immer mit ihren Eltern gestellt werden (der Kommentar sie in der Antwort ist), auch wenn die Eltern eine Anzahl von Seiten aus den jüngsten Kommentaren sind. Dies ist, wie die Dinge auf apps getan wie der icanhascheezburger Blog. Ich mag es nicht ein paar Dinge darüber, wie die Art und Weise, dass jeder eine Antwort auf hinzuzufügen versucht ist, was ist der größte Baumzweig.

  • Die dritte Option ist wie Slashdot hat zu tun, wo es keine Kommentare in Seiten trennen, hat aber einen großen Baum -., Um die Seitengröße überschaubar zu halten beginnt es stattdessen mit niedriger Rating Kommentaren Culling

Ich denke, die ersten meine Beziehungstabelle die einfachste DB Abfrage gegeben sei, würde aber für andere Ideen offen sein.

Einige solcher Systeme aller drei Arten, die Verschachtelungsebene in irgendeiner Weise begrenzen - das ist einfach genug zu tun, wenn wir über X Ebenen alles rekursiv haben, können auch zusammen kombiniert werden, als ob sie Geschwister sind. Zum Beispiel kann nur YouTube Kommentare zu einer Ebene machen. Andere Systeme sagen manchmal „Verschachtelungsebene überschritten“ nach 5 oder so Ebenen.

War es hilfreich?

Lösung

Ich gehe davon aus, dass der Grund, warum Sie verschachtelte Kommentare wollen überhaupt ist, weil die Benutzer zu einem Zeitpunkt durch einen einzelnen Thread von Interesse zu wollen, neigen dazu, zu lesen. Das heißt, Sie haben Grund zu glauben, dass Benutzer Fäden zusammenhängender Gedankenketten schaffen werden, und / oder was in einem Thread diskutiert wird wird einige Benutzer interessieren, andere aber nicht.

Wenn das der Fall ist, ich weiß nicht, warum Sie überhaupt teilen wollen würden willkürlich einen Thread über mehrere Seiten nach Datum (Option 1). Mit scheint eine einzelne Seite mit Keulung von niedrig bewerteten Kommentaren (Option 3) ein wenig hart und kann die Benutzer davon abhalten, Kommentare zu veröffentlichen. Das mag eine gute Sache sein, wenn Sie ein Publikum Masse wie SlashDot haben, aber es kann für Standorte mit typischeren Visitation Raten unerwünscht sein.

Vielleicht können Sie so etwas wie Option 2, mit allen Threads auf der gleichen Seite, aber wenn ein Thread zu lange immer beginnt, es wird zu einem einzigen Link aufgerollt, die den Benutzer auf einer Seite zu diesem Thread gewidmet nimmt. Alternativ können lange Fäden verringert werden, um nur die Betreffzeilen und Autoren zu zeigen, die jeweils die wiederum Verbindung an der entsprechenden Stelle in einer speziellen Seite für den Faden.

Ich vermute, dass die Tendenz für die Nutzer im größten Thread irrelevante Kommentare zu schreiben ist ein Produkt der Benutzer wollen nicht mit Scrollen um gestört zu werden, um das Ende des Fadens zu finden, oder einen Faden finden, der besser geeignet ist. Durch die automatische langen Fäden verdichtet, so dass die Wurzel aller Threads auf einer einzigen Seite von überschaubarer Länge angezeigt werden, kann der Anwender scannen leicht für einen Thread von Interesse und, um es hinzuzufügen, falls gewünscht.

Andere Tipps

Ich denke, was Sie brauchen, um ein hierarchischen Daten in einer Datenbank speichern. Sie sollen mit diesem Artikel starten: Artikel bei sitepoint Artikel bei MySQL Webseite

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top