Ich bin im Moment dabei, ein Nachrichtensystem zu erstellen, sodass bis zu fünf User gleichzeitig sich in einem Gespräch unterhalten können.
[Blockierte Grafik: http://i42.tinypic.com/rmjuxc.gif]
Oben seht ihr die Datenbankspalten. Die `talker_X` beinhalten eine User-ID, die später verarbeitet wird. `last_read_date_X` beinhaltet jeweils den Timestamp zu `talker_X`, wann er das Gespräch das letzte Mal gelesen hat.
Nun möchte ich auf der Übersichtsseite die Sektion "Gespräche mit ungelesenen Nachrichten" machen. Hierfür erfolt folgende Query (Im Beispiel hat der User die ID 123):
Ziel ist es, alle Einträge zu finden, in denen der User 123 aktiv (`talker_X` = '123') ist und deren Gespräche nicht von allen gelesen wurden (`last_read_date_X` < `last_message`). `last_message` beinhaltet den Timestamp, wann die letzte Nachricht in diesem Gespräch geschrieben wurde.
Hat auch alles bisher gut geklappt (Übrigens werden die Einträge später per PHP weiterverarbeitet, also wenn `last_read_date_X` von User 123 größer/gleich `last_message` ist, wird die Zeile übersprungen und nicht ausgegeben). Aber, wenn jetzt alle User in diesem Gespräch das Gespräch nach der letzten Nachricht gelesen haben (sprich `last_read_date_X` ist überall größer als `last_message`) wird der Eintrag trotzdem angezeigt.
Kann mir vllt. wer helfen, was ich falsch mache? Danke!
[Blockierte Grafik: http://i42.tinypic.com/rmjuxc.gif]
Oben seht ihr die Datenbankspalten. Die `talker_X` beinhalten eine User-ID, die später verarbeitet wird. `last_read_date_X` beinhaltet jeweils den Timestamp zu `talker_X`, wann er das Gespräch das letzte Mal gelesen hat.
Nun möchte ich auf der Übersichtsseite die Sektion "Gespräche mit ungelesenen Nachrichten" machen. Hierfür erfolt folgende Query (Im Beispiel hat der User die ID 123):
Quellcode
- SELECT `id`,`title`,`talker_1`,`talker_2`,`talker_3`,`talker_4`,`talker_5`,`last_read_date_1`,`last_read_date_2`,`last_read_date_3`,`last_read_date_4`,`last_read_date_5`,`date`,`last_message`,`last_message_user_id` FROM `talks` WHERE (`last_read_date_1` < `last_message` OR `last_read_date_2` < `last_message` OR `last_read_date_3` < `last_message` OR `last_read_date_4` < `last_message` OR `last_read_date_5` < `last_message`) AND (`talker_1` = '123' OR `talker_2` = '123' OR `talker_3` = '123' OR `talker_4` = '123' OR `talker_5` = '123') ORDER BY `date` DESC
Ziel ist es, alle Einträge zu finden, in denen der User 123 aktiv (`talker_X` = '123') ist und deren Gespräche nicht von allen gelesen wurden (`last_read_date_X` < `last_message`). `last_message` beinhaltet den Timestamp, wann die letzte Nachricht in diesem Gespräch geschrieben wurde.
Hat auch alles bisher gut geklappt (Übrigens werden die Einträge später per PHP weiterverarbeitet, also wenn `last_read_date_X` von User 123 größer/gleich `last_message` ist, wird die Zeile übersprungen und nicht ausgegeben). Aber, wenn jetzt alle User in diesem Gespräch das Gespräch nach der letzten Nachricht gelesen haben (sprich `last_read_date_X` ist überall größer als `last_message`) wird der Eintrag trotzdem angezeigt.
Kann mir vllt. wer helfen, was ich falsch mache? Danke!
