LinuxUser: Forum wie dieses - Antwort auf Antwort

Hallo!

Ich bin derzeit dabei ein kleines Forum zu schreiben.

Nun soll es aber nicht eins der Foren sein, wo es ein Thema gibt und alle dazu untereinander ihre Meinung äußern. Sondern es soll wie dieses Forum hier gestaltet sein, wo auch Antworten auf Antworten möglich sind.

Das Anzeigen des Themas mit den dazugehörigen Antworten realisiere ich über eine MySQL-Datenbank in der neben der ID auch eine Parentid gespeichert ist, um den Beitrag dem entsprechenden Thema zuzuordnen.
Soweit kein Problem.

Um aber auch Antworten auf Antworten zuzulassen, muss bei jeder Antwort geprüft werden, ob es auch darauf noch eine Antwort gibt.
Existiert diese, wird sie angezeigt. Nun muss die Schleife aber wieder zurückgehen, um den nächsten Beitrag und evtl. Antworten auf diesen anzuzeigen.

Wie ist mir das möglich?
Hilft Rekursion in diesem Fall weiter?

Vielen Dank im Voraus!
LinuxUser

  1. Sup!

    Wie ist mir das möglich?
    Hilft Rekursion in diesem Fall weiter?

    Ja, genau so. Es ist wie das Durchlaufen eines Baumes mit "Tiefe zuerst" als Strategie, denn ein Thread mit Unterthreads ist ein Baum.

    Gruesse,

    Bio

    --
    Ich bin ein Mobber - mein Posting tut mir leid! EHRLICH!!!
  2. Hey, LinuxUser,

    vielleicht hilft dir das ja auch noch weiter: http://aktuell.de.selfhtml.org/artikel/phpasp/php-forum/index.htm.

    File Griese,

    Stonie

  3. Hi!

    Um aber auch Antworten auf Antworten zuzulassen, muss bei jeder Antwort geprüft werden, ob es auch darauf noch eine Antwort gibt.
    Existiert diese, wird sie angezeigt. Nun muss die Schleife aber wieder zurückgehen, um den nächsten Beitrag und evtl. Antworten auf diesen anzuzeigen.

    Wie ist mir das möglich?
    Hilft Rekursion in diesem Fall weiter?

    Jepp! Und genau dazu gibt es einen hervorragenden Features Artikel: http://aktuell.de.selfhtml.org/artikel/phpasp/php-forum/index.htm

    Grüße
    Andreas

  4. Hallo,

    ...und damit Du weist, was Du nicht willst und was Du willst, hier noch was Hintergrund außerhalb des technischen Bereiches:

    http://aktuell.de.selfhtml.org/artikel/gedanken/foren-boards/index.htm

    (Das was Du nicht willst nennt man meistens "Boards" (außer die, die eins haben, die nennen es in der Regel "Forum")...)

    Chräcker

  5. Moin!

    Um aber auch Antworten auf Antworten zuzulassen, muss bei jeder Antwort geprüft werden, ob es auch darauf noch eine Antwort gibt.
    Existiert diese, wird sie angezeigt. Nun muss die Schleife aber wieder zurückgehen, um den nächsten Beitrag und evtl. Antworten auf diesen anzuzeigen.

    Wie ist mir das möglich?
    Hilft Rekursion in diesem Fall weiter?

    Eine Rekursion könnte helfen, ich würde aber etwas anders vorgehen.

    Wichtig ist, dass du auch eine Thread-ID vergibst - alle Beiträge eines Threads haben die gleiche ID. Anhand der ID kannst du alle Beiträge eines Threads aus der Datenbank extrahieren. Und das ist eine gute Sache, denn Datenbanken mögen es nicht besonders, wenn sie mit SELECTs überflutet werden - dein bisheriger Ansatz deutete aber darauf hin, dass du zuerst den Start-Beitrag suchst, dann alle Beiträge, die darauf antworten, dann alle Beiträge, die auf jede einzelne Antwort antworten, und so weiter. Das mag bei einem kleinen Testforum noch funktionieren, aber wenn mehr User kommen, wird das schnell zum Problem.

    Lies also alle Beiträge, die es zu einem Thread gibt, mit einem Datenbankzugriff aus. Lasse sie dabei am besten gleich nach Message-ID sortieren - das dürfte dann nämlich chronologische sortieren, die kleineren IDs sind früher gepostet worden. Message-IDs kommen dabei nicht doppelt vor. Jede Nachricht, egal zu welchem Thread sie gehört, kriegt eine eigene ID.

    Und wenn du alle Messages eines Threads hast, kannst du sie im Speicher so zusammenwürfeln, dass du einen Baum draus machst. Das spannendste an dieser Aufgabe ist die Wahl einer dafür geeigneten Datenstruktur.

    - Sven Rautenberg

    --
    "Bei einer Geschichte gibt es immer vier Seiten: Deine Seite, ihre Seite, die Wahrheit und das, was wirklich passiert ist." (Rousseau)