sacool: Foren als ungelesen / gelesen markieren

Hallo,

Viele Foren, wie zb das WBBoard haben eine Fumktion, dass man anhand eines Icons sehen kann, ob in dem jeweiligen Forum, Unterforum oder Thema ein neuer, ungelesener Beitrag ist.

Wenn man sich dann dieses Beitrag durchliest, bzw. das Thema mit dem neuen Beitrag anklickt, erscheint das Thema/Forum als gelesen.

Wie kann man solch eine Funktion realisieren? Sollte man dafür eine MySQL-Tabelle erstellen, in der man dann für jeden User angibt, welche Beiträge schon gelesen wurden? Kann man das mit Sessions durchführen?

Ich hoffe ihr wisst, wie man sowas bestmöglich erstellen kann.

  1. Hallo!

    Viele Foren, wie zb das WBBoard haben eine Fumktion, dass man anhand eines Icons sehen kann, ob in dem jeweiligen Forum, Unterforum oder Thema ein neuer, ungelesener Beitrag ist. [...]»»
    Wie kann man solch eine Funktion realisieren? Sollte man dafür eine MySQL-Tabelle erstellen, in der man dann für jeden User angibt, welche Beiträge schon gelesen wurden? Kann man das mit Sessions durchführen?

    Umgekehrt ist der Weg, würd ich sagen; erstelle einfach einfach eine Tabelle "unread_threads" oder so, in dem du userids und themenids speicherst.

    Und zwar so, wenn jemand einen neuen Beitrag oder einen neuen Thread geschrieben hat, schreibst du in die Tabelle alle Userids und die aktuelle Threadid dazu.
    Sobald ein bestimmter User den Thread liest, löscht du die entsprechende Kombination aus Userid und Threadid aus der Tabelle.

    Damit die Tabelle nicht endlos groß wird, kannst du ja alle Einträge für die User löschen, die länger als 5 Tage nicht online waren oder so.

    Gruß,
    Andy

    1. Umgekehrt ist der Weg, würd ich sagen; erstelle einfach einfach eine Tabelle "unread_threads" oder so, in dem du userids und themenids speicherst.

      Und zwar so, wenn jemand einen neuen Beitrag oder einen neuen Thread geschrieben hat, schreibst du in die Tabelle alle Userids und die aktuelle Threadid dazu.
      Sobald ein bestimmter User den Thread liest, löscht du die entsprechende Kombination aus Userid und Threadid aus der Tabelle.

      Damit die Tabelle nicht endlos groß wird, kannst du ja alle Einträge für die User löschen, die länger als 5 Tage nicht online waren oder so.

      Das hört sich sehr gut an. Danke :)

      1. sry für den Doppelpost, aber mir ist gerade was aufgefallen:

        Wenn ich die Methode, wie du sie beschrieben hast, verwirkliche und sagen wir mal in dem Forum dann 200 Mitglieder habe, muss ich ja für jeden Beitrag schon alleine 200 SQL Befehle ausführen.

        Ist das nicht ziemlich aufwendig?

        1. sry für den Doppelpost, aber mir ist gerade was aufgefallen:

          Das ist kein Doppelpost! :)

          Wenn ich die Methode, wie du sie beschrieben hast, verwirkliche und sagen wir mal in dem Forum dann 200 Mitglieder habe, muss ich ja für jeden Beitrag schon alleine 200 SQL Befehle ausführen.
          Ist das nicht ziemlich aufwendig?

          Nein, die sinngemäße Query wäre wie folgt:
          REPLACE INTO threads_unread (userid,threadid) SELECT userid, dieaktuellethreadidhier FROM users

          Also nur ein Befehl! :) Die userids kommen direkt aus deiner Tabelle mit den Benutzern.

          Gruß,
          Andy

          1. Nein, die sinngemäße Query wäre wie folgt:
            REPLACE INTO threads_unread (userid,threadid) SELECT userid, dieaktuellethreadidhier FROM users

            Also nur ein Befehl! :) Die userids kommen direkt aus deiner Tabelle mit den Benutzern.

            Ok die Funktion Replace kannte ich bisher noch nicht.

            Noch mal Danke. Jetzt werde ich es wohl hinbekommen.

            1. Ok die Funktion Replace kannte ich bisher noch nicht.

              Ist das Selbe wie INSERT, bis auf die Tatsache, dass vorhande Einträge ersetzt werden, ansonsten kann es eine Fehlermeldung geben.

              Gruß,
              Andy

      2. Das hört sich sehr gut an. Danke :)

        Bitte!

        Damit die Tabelle nicht endlos groß wird, kannst du ja alle Einträge für die User löschen, die länger als 5 Tage nicht online waren oder so.

        Ach ja, hab ich so gemeint, das Threads, die älter als 5 Tage (oder andere Zeit) aus der Tabelle rausfliegen, nicht wenn der User nicht online war! Sonst könnte die Zeit grade rum sein und er hat gar keine Threads als neu markiert! *g*

        Gruß,
        Andy