Wie funkionieren Foren

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Titus
    antwortet
    > Wie?
    > Würdest Du das denn machen?
    per php ... siehe unten

    > Ich weiß leider nicht was ZEND ist,
    > und was ich damit machen kann.
    Mit Zend kann man die php-Skripte kompilieren; sie müssen anschließend nicht mehr bei jedem Aufruf interpretiert werden -> schneller & weniger Prozessorlast

    >Du mußt doch dann quasi in dem
    > result-set suchen. Wie geht das?
    z.B. so:
    1) ganzes thread (ab anzuzeigendem Post) vorsortiert fetchen:
    $q = mysql_query ("select * from POSTINGS where THREAD_ID=$thread_id and ID>=$post_id order by PARENT_ID asc,ID asc");
    for ($p=array(); $x=mysql_fetch_array($q); ) $p[]=$x;
    2) aktuelles posting ausgeben:
    show_post ($p[0]);
    3) Liste der follow-ups nach sub-thread:
    unset ($p[0]);
    show_sub ($p, $post_id);

    function show_sub ($p, $id) {
    for ($subs = array(), reset($p); $x=each($p); ) if ($x[1][PARENT_ID]==$id) $subs[]=$x[0];
    if (count($subs)) {
    echo '<ul>'; for ($i=0; $i<count($subs); $i++) {
    $x = $p[$subs[$i]]; unset ($p[$subs[$i]]);
    echo '<li>',$x[TOPIC],' von ',$; show_sub ($p, $x[ID]); echo '</li>';
    }
    echo '</ul>';
    }
    }

    Mit wenig Aufwand läßt sich das so so umbauen, daß das gesamte thread aufgelistet und das aktuelle Posting
    hervorgehoben wird.

    -=* Titus *=-
    | php pro |
    |nerd for life|
    """""""""""""""

    the PHP resource

    Einen Kommentar schreiben:


  • 21.de
    antwortet
    Wie?

    Würdest Du das denn machen? Ich weiß leider nicht was ZEND ist, und was ich damit machen kann.

    Du mußt doch dann quasi in dem result-set suchen. Wie geht das?

    Ciao.21

    Einen Kommentar schreiben:


  • Titus
    antwortet
    Also, der DB-Server kann weniger Probleme bekommen, wenn du nur eine Query absetzt und dann per php aussiebst und sortierst.
    Spätestens mit php4 und zend dürfte es da absolut keine Probleme geben.

    -=* Titus *=-
    | php pro |
    |nerd for life|
    """""""""""""""

    Einen Kommentar schreiben:


  • 21.de
    antwortet
    Ja, das auch!

    aber eigentlich habe ich doch dann ein Liste des kompletten Boards, wenn ich immer mit dem ersten Posting anfange, oder?

    Also bei mir sieht's jetzt ganz gut aus...

    Einen Kommentar schreiben:


  • Titus
    antwortet
    Wenn ich das richtig verstehe, willst Du also immer nur den Inhalt EINES Postings angeben und eine Liste der Anworten bis in die x-te Generation ... liege ich da richtig?

    Einen Kommentar schreiben:


  • admin
    antwortet
    TREFFER!

    Ich hab's genau wie Titus gemacht. Die Baumstruktur wird allein anhand einer parent_id erzeugt. Der Nachteil ist zunächst, das ich für jede Zeile die ich ausgeben will, ein eigenes SQL-Query absetzen muß - was sich aber beim witerdenken zum Vorteil entwickelt, weil ich dann bei großen Threads von mehreren Hundert Antworten die Last gering halte, weil ich eben immer nur einen kleinen Teil des Threads abfrage...

    Müßte gehen, oder?

    Das Problem dabei, wenn man das schon in der DB richtig speichern will ist doch, das ich nicht weiß wieviele Leute noch auf einen Post antworten werden (Kann aber auch sein, das ich Dich nicht richtig verstanden habe...)

    Interesse an der Lösung? (Obwohl Titus ja auch schon was gezeigt hat...)

    Ciao.21

    Einen Kommentar schreiben:


  • admin
    antwortet
    Db Struktur

    z.b


    |Tread | TeadResponse | Ebene
    +------+--------------+-------
    |1 |1 |1
    |1 |2 |2
    |1 |3 |2

    Diese Datenbank würde mit Select: select * from Forum .... order by Tread ,TeadResponse
    den baum richtig ausgeben

    ?? oder

    Einen Kommentar schreiben:


  • Titus
    antwortet
    also, ich würde ...

    jedem Post eine id (primary key), eine thread_id und eine parent_id (jeweils noch index drauf) geben, so daß ich

    a) in einer Query sämtliche threads listen kann:
    select ID,TOPIC from POSTINGS where PARENT_ID=0 order by DATE desc
    b) alle Postings eines Threads auf einmal fetch kann:
    select * from POSTINGS where THREAD_ID=xxx order by ID asc
    c) die Baumstruktur gespeichert habe, die ich dann rekursiv ausgeben kann:
    function show_thread ($index) {
    global $result; // enthält alle Ergebnisse des fetches
    show_post ($result[$index]); // aktuelles Posting ausgeben
    $id = $result[$index][ID];
    for ($i=0; $i<count($result); $i++)
    if ($result[$i][PARENT_ID]==$id)
    show_thread($i);
    }

    Gerade bei umfangreichen threads hält das die Last auf dem DB-Server möglichst gering.

    -=* Titus *=-
    | php pro |
    |nerd for life|
    """""""""""""""

    Einen Kommentar schreiben:


  • admin
    antwortet
    Ich hab jetzt...

    ...mal die Lösung mit der rekursiven Funktion umgesetzt. Das war sehr einfach, ging schneller als ich dachte. Ich habe gesehen, das viele Foren auf diese Weise arbeiten, und hoffe das es nicht zu sehr auf die Performance geht.

    Wie meinst Du das denn - direkt richtig speichern? Wie würdest Du das denn machen?

    Ciao.21

    Einen Kommentar schreiben:


  • admin
    antwortet
    ??

    ich glaube nicht,
    ich denke es liegt wohl eher am "Order by". Denn wenn du die Daten richtig in der Datenbank ablegst, denke ich du kannst die Daten dann auch in der richtigen Reihenfolge ausgeben.
    Die Tiefe erhälst du sofort beim speichern eines neuen Beitrags.

    Ich habe mich selber noch nichtg mit dem problem beschäftigt. Wenn du eine bessere Lösung gefunden hast würde ich gerne eine kurze Lösungsbeschreibung haben.

    Danke

    F2p

    Einen Kommentar schreiben:


  • admin
    antwortet
    Ja, aber...

    ...das habe ich ja schon mehrfach versucht, leider jedoch ohne erfolg, weil die fertigen Scripte kaum oder keine Dokumentation oder Kommentare besitzen. Das ist sehr schwer, da eine logik herauszusehen.

    Stimmt es, das ich wohl nicht um eine rekursive Funktion rumkomme? Muß ich dabei in jedem Schleifendurchgang ein SQL-Statement abschicken?

    Ciao, Christian

    Einen Kommentar schreiben:


  • admin
    antwortet
    Die Konkurrenz hats!

    Installiert doch einfach eines der bekannten Foren und schau dir mal die Logig an.

    Dort findest du alles was du brauchst.

    F2p

    Einen Kommentar schreiben:


  • admin
    hat ein Thema erstellt Wie funkionieren Foren.

    Wie funkionieren Foren

    Hallo Leute!

    Wir arbeiten an einerem größeren WebProjekt, und würden gerne Foren mit Threads erstellen, d.h. das die Übersicht in Baumform dargestellt wird. Wie mache ich das denn am besten. Details sind nicht wichtig, eher der logische Ablauf (SQL-Queries, schleifen usw...) Das ganze eilt leider etwas...

    Wäre klasse, wenn Ihr mir helfen könntet.
Lädt...
X