Benachrichtungen bei Kommentar-Antworten

Du speicherst die User ab, die den Thread gelesen haben. Das werden immer weit weniger als 1000 sein.

Genauer:
Es würde reichen, wenn du wie Erik schreibt, speicherst wer den Kommentar gelesen hat. Du musst ja dann nur auslesen wer den letzten Post geschrieben hat um das für dein "XY hat auf Kommentar XY geantwortet". zu verwenden. Und wenn du dann abgleichst, wer den Thread erstellt hat, kannst du den User auch gesondert benachrichtigen.
Du musst dann für jeden Kommentar speichern
ID | Text | Ersteller | Datum | Letzter Post am | von | Gruppe | gelesen
wobei Gruppe optional ist und auf eine Tabelle verweist, die z.B. User enthält, die einen Thread abonniert haben.
Wenn sich dann ein User anmeldet liest du den Zeitstempel der letzten Anmeldung aus der Userdatenbank und gleichst für alle Kommentare die neuer sind die UID mit Ersteller und gelesen (und evt. Gruppe) ab.



So werde ich es machen! :) Danke für eure Hilfe.

Liebe Grüße
Micha
 
Du meinst also, dass man für jeden Kommentar eine extra Tabelle anlegt, und in der die UserID
ID | UID speichert die den Thread gelesen haben?
Verglichen mit einer Liste von UID's mit einem Trennzeichen in einem String.
Ich denke, das man nicht pauschal sagen kann was schneller ist, ein Lookup in der Tabelle oder ein explode in php. Könnte ja mal vielleicht jemand testen. Ich vermute, das es für User < 1000 mit PHP schneller ist, vor allem weil man dann die UID bereits in einem Array hat, das man direkt weiterverarbeiten kann.
an Stelle von explode könnte man auch einen serialisierten array in der DB Speichern und dann unserialise() drauf anwenden anschließend einfach mit in_array() abfragen.
 
an Stelle von explode könnte man auch einen serialisierten array in der DB Speichern und dann unserialise() drauf anwenden anschließend einfach mit in_array() abfragen.
Das ist nett wenn man jedesmal alle Daten mit PHP lädt und erst dann ausfiltert. Das bedeutet aber a) viel Traffic zwieschen DB und PHP-Server, b) viel Spiecher auf dem PHP-Server zum bei jedem Zugriff ALLE Daten zu lesen.

Idealerweise filtert man aber mit SQL bereits auf der DB-Seite.
 
Das ist nett wenn man jedesmal alle Daten mit PHP lädt und erst dann ausfiltert. Das bedeutet aber a) viel Traffic zwieschen DB und PHP-Server, b) viel Spiecher auf dem PHP-Server zum bei jedem Zugriff ALLE Daten zu lesen.

Idealerweise filtert man aber mit SQL bereits auf der DB-Seite.
Das ist mir klar. Das war nur eine alternative zur explode Methode (bei der man natürlich auch alles Daten erstmal abrufen muss und dann filtert)

ich persönlich bevorzuge auch in fast jedem Fall eine Filterung der Daten auf DB Seite.
 
Naja, in einer Kommaliste kann man auch auf MySQL-Seite mit SQL zugreifen. FIND_IN_SET() heisst der Befehl

SQL:
-- listfield = 'a,b,c,d'
SELECT *
FROM mytable
WHERE IFNULL(FIND_IN_SET('b',listfield),0);

Aber natürlich ist eine normalisierte Version performanter und sauberer
 
Zuletzt bearbeitet von einem Moderator:
Naja, in einer Kommaliste kann man auch auf MySQL-Seite mit SQL zugreifen. FIND_IN_SET() heisst der Befehl

SQL:
-- listfield = 'a,b,c,d'
SELECT *
FROM mytable
WHERE IFNULL(FIND_IN_SET('b',listfield),0);

Aber natürlich ist eine normalisierte Version performanter und sauberer
okay, so weit habe ich mich mit SQL Abfragen noch gar nicht befasst.
 
Zuletzt bearbeitet von einem Moderator:
Kannst du nochmal ausführen, was du mit normalisierter Version meinst? Mir scheint du hast am meisten Ahnung von SQL, wie würdest du das Problem lösen?
 
Hier findest du einen kurzen Einstieg in das Thema. Solltest du dir auf jeden Fall antun, damit du wenigstens mal die Grundlagen gehört bzw. angerissen hast, bevor du sowas realisieren willst.
 
Zurück