• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

PHP Forum - Nicht gelesene Einträge einem User anzeigen

CGollhardt

Mitglied
Guten Abend,

ich wollte mal Fragen wie man in einem Forum am besten die nicht gelesenen Einträge (letzten 30 Tage) einem User anzeigt.

Ausgangspostion:
- Das Forum ist selbst geschrieben
- Es funktioniert und ist bereits im Einsatz
- Ich habe keine Möglichkeit aus den derzeitigen Datensätzen eine solche Funktion zu realisieren

Aktuelle Datenbankstruktur:
- Es gibt eine Spalte Threads, die eine ID und sonstige Daten haben
- An der Spalte Threads häng Posts. Diese haben ebenfalls eine ID und haben eine ParentID (Threads)

So würde ich es umsetzen:
- Jedes mal wenn ein User einen Post macht werden alle ID's der derzeitig angemeldeten User geholt
- Per PHP wird in eine Spalte UnreadedPosts jede der geholten ID's und die Post/Thread ID eingetragen
- Wenn der User auf das Forum klickt, wird für jeden Thread geprüft, ob die Thread ID in der Spalte UnreadedPost mit seiner UserID verknüpft ist. Wenn ja, wird dieser Thread als Ungelesen makiert werden
- Ein Cronjob würde anhand eines Timestamps in der UnreadedPosts alle Beiträge die älter als 30 Tage sind löschen

Die Frage:
Ich persönlich halte es für einen extrem großen Overhead, man stelle sich vor es gibt 10.000 registrierte User, dann würde bei einem Post die IDs von 10.000 Usern ausgelesen werden, und 10.000 neue Inserts erstellt werden. Kann ich dies irgendwie besser machen?

Vielen Dank für eure Hilfe!

Edit:
Ich glaube zwar nicht das es hilft, aber hier der Link zum Forum http://www.ggs-clan.de/design.php?seite=forum
Wenn Programmcode erforderlich ist, würde ich diesen Posten
 
Zuletzt bearbeitet:
Hmm... einmal musst du mindestens dir für den Benutzer die UnreadedPosts hollen.
Wenn du den Traffic vermindern willst hilft dir dabei JSON. Danach würde ich es per JS beim Clienten speichern in eimen Objekt oder in einem Array.
Somit hollt sich jeder Benutzer nur 1 mal die UnreadedPosts.

Wenn du nochmehr Ressourcen speichern willst, kannst du AJAX nutzen.
So kannst du nachträglich im Hintergrund Informationen nachladen.
Somit kannst du nur die Informationen laden, die der Benutzer sehen will.... wenn er neue Informationen abfragt ladest du diese mit AJAX nach.... und sparst damit, unnötigen ballast.
 
agund, du beantwortest die Frage überhaupt gar nicht. AJAX ist übrigens kein Ersatz von JSON; die beiden Begriffe haben nichts gemein.

@CGollhardt: Die Idee ist nicht schlecht, allerdings siehst du es falsch rum. Folgende Tabelle reicht:
thread_views: thread_id, user_id, post_id

post_id repräsentiert die ID des zuletzt gesehenen Posts im Thread (thread_id) für einen Benutzer (user_id). Sollte der Benutzer diesen Thread nie gelesen haben, wird für ihn kein Eintrag erstellt und so wird nicht pro Post pro Benutzer einer erstellt, sondern nur pro Thread pro Benutzer. Das ermöglicht auch noch die Tatsache, dass du Threads auf viele Seiten aufteilen kannst und solange nicht die letzte Seite aufgerufen wurde, ist der Thread ungelesen.
 
Zurück
Oben