Wie funkionieren Foren

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

  • 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.

    php-Entwicklung | ebiz-consult.de
    PHP-Webhosting für PHP Entwickler | ebiz-webhosting.de
    die PHP Marktplatz-Software | ebiz-trader.de

  • #2
    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

    php-Entwicklung | ebiz-consult.de
    PHP-Webhosting für PHP Entwickler | ebiz-webhosting.de
    die PHP Marktplatz-Software | ebiz-trader.de

    Kommentar


    • #3
      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

      php-Entwicklung | ebiz-consult.de
      PHP-Webhosting für PHP Entwickler | ebiz-webhosting.de
      die PHP Marktplatz-Software | ebiz-trader.de

      Kommentar


      • #4
        ??

        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


        php-Entwicklung | ebiz-consult.de
        PHP-Webhosting für PHP Entwickler | ebiz-webhosting.de
        die PHP Marktplatz-Software | ebiz-trader.de

        Kommentar


        • #5
          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

          php-Entwicklung | ebiz-consult.de
          PHP-Webhosting für PHP Entwickler | ebiz-webhosting.de
          die PHP Marktplatz-Software | ebiz-trader.de

          Kommentar


          • #6
            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|
            """""""""""""""

            Kommentar


            • #7
              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


              php-Entwicklung | ebiz-consult.de
              PHP-Webhosting für PHP Entwickler | ebiz-webhosting.de
              die PHP Marktplatz-Software | ebiz-trader.de

              Kommentar


              • #8
                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

                php-Entwicklung | ebiz-consult.de
                PHP-Webhosting für PHP Entwickler | ebiz-webhosting.de
                die PHP Marktplatz-Software | ebiz-trader.de

                Kommentar


                • #9
                  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?

                  Kommentar


                  • #10
                    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...

                    Kommentar


                    • #11
                      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|
                      """""""""""""""

                      Kommentar


                      • #12
                        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

                        Kommentar


                        • #13
                          > 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

                          Kommentar

                          Lädt...
                          X