PHP Forum-Programmierung Meinungen

Eagle-PsyX-

Commander
Registriert
Juni 2006
Beiträge
2.057
Hi,

ich habe mal mir einige Gedanken gemacht, wie ich bei einem Forum die Information abspeichern soll, welchen Thread man bereits schon gelesen hat oder nicht.

Und genau dafür bräuchte ich mal paar Meinungen oder Idee, und nicht zur Tatsache, dass ich ein Forum programmieren muss/bzw. dabei bin. Es handelt sich um eine n-Sprachen-fähige Webseite die auch ein sehr kleines aber eben spezielles Forum braucht. Ahja, das CMS sowie das Forum arbeiten über MySQL.

Der Vorschlag, der mit am geeignesten scheint ist folgender:
- Wenn man ein Thread öffnet wird überprüft, ob in einer Tabelle 'forum_thread_visited' der Eintrag steht, ob dieser Besucher schonmal das Thread geöffnet hatte.
-Wenn nicht wird eine Information abgespeichert.
-Jedoch, wenn bereits ein Eintrag besteht, geschieht nichts.
- Wird ein neuer Eintrag im Thread erstellt, werden alle Einträge mit dieser 'thread_id' gelöscht.
- Wird bei der Auflistung der Beiträge ein INNER JOIN ausgeführt und dabei geprüft ob ein Eintrag vorhanden ist
-Falls ja, "Keine neue Beiträge"
-Wenn nein, "Neue Beiträge".

| forum_thread_visited |
###############
| thread_id | user_id |

Was mich sehr intressieren würde, ist wie vBulletin damit umgeht. Wird das auch so gehandhabt?
Vorallem hier in der Forum-Übersicht unten, der Link "Alle Foren als gelesen markieren" würde doch enorm viel Leistung beanspruchen bei 613.319 Themen und 376.396 Benutzer?
 
Zuletzt bearbeitet:
hm, so in der art hätt ich es wohl auch gemacht. installier bei dir doch mal nen WBB Lite oderso und guck wie sich die DB verhällt?
 
Eagle-PsyX- schrieb:
Hi,
Vorallem hier in der Forum-Übersicht unten, der Link "Alle Foren als gelesen markieren" würde doch enorm viel Leistung beanspruchen bei 613.319 Themen und 376.396 Benutzer?

Hier gilt es entsprechende Sub-Indizes zu setzen. Die von Dir genannten Zahlen stellt für mich im erstem Moment nicht wirklich eine Herausforderung da.

Warum schaust Du Dir noch den Code und das Datenbank-Design bekannter Forensoftware wie phpBB, VBulletin, Woltlab & Co. an?

Das sollte dann ja als "Futter" genügen. Dein erster "Entwurf" klingt im ersten Moment jedenfalls schonmal soweit ok.

Spannender wird es, wenn man sich das komplette Datenbank-Design visualisiert. Vielleicht kannst Du uns ja später mit Screenshots des Designs als Input versorgen?

DBVisualizer z. B. ist hierfür gerade zu ideal :)

Ach ja, was für eine Table-Engine wirst Du benutzen?
MyISAM oder InnoDB?

InnoDB z. B. kann mit FOREIGN KEYS einem zusätzliche Lösch / Updatevorgänge tabellenübergreifen abnehmen (ON CASCADE, ON DELETE etc.).
 
Zuletzt bearbeitet:
Ich habe eher gehofft, dass jemand es auswendig wüsste, wie phpBB/vBulletin etc. das erledigen.

Nun, ich schätze ich werde es umsetzten und setzte wie gewohnt auf MyISAM.
 

Anhänge

  • designer.png
    designer.png
    21 KB · Aufrufe: 152
Sowas auswendig wissen - na ja - eher weniger.

Wenn es um bekannte Frameworks geht, schon eher, aber nicht um (teilweise miesen) Code aus phpBB & Co. Wobei das WFC interessant sein könnte dafür...

Bin auch schon ehrlich gesagt zu lange aus phpBB raus das ich da angaben machen könnte.
Vielleicht gibt es aber hier doch noch ein paar Forensoftware-Entwickler / Programmierer die sich mitteilen möchten - ist jedenfalls für mich auch interessanter Stoff....
 
Da fällt mir noch etwas ein:
Wenn man "Alle Foren als gelesen markieren" drückt, wird in einer anderen Tabelle (forum_thread_visited_all) ein Zeitstempel und die UserID abgespeichert. Alle Einträge mit der selben UserID werden bei den "Einzel-Einträge" (forum_thread_visited) gelöscht, wenn diese älter sind wie der aktuelle der Zeitstempel-Eintrag in der Tablle "forum_thread_visited_all".

Was meint ihr? Eine gute Ergänzung?
Natürlich müsste dann "forum_thread_visited" um folgendes ergänzt werden:

| forum_thread_visited |
###############
| thread_id | user_id | visited_timestamp |

| forum_thread_visited_all |
###############
| user_id | visited_all_timestamp |

Somit werden auch nur die neueren "als gelesen markierte" Einträge stehen bleiben und alle die davor als "Alle als gelesen markiert"-defenierten wurden gelöscht.
 
Zurück
Oben