Hallo,
Ich habe ein nachrichtensystem auf Mysql /php basis entwickelt, in welchem nachrichten an benutzer und/oder gruppen geschickt werden. Damit nachrichten auch als gelesen / ungelesen markiert sein können, musste ich eine extra tabelle die diese information enthält (benutzer_id und nachricht_id) anlegen. klappt prima.
Jetzt wird von mir verlangt, den nachrichten eingang nicht nur nach datum zu sortieren, sondern erst nach gelesen / ungelesen und dann nach datum.
meine tabellen sehen so aus:
Nachrichten:
id (int, autoinc) primärschlüssel
datum (datetime)
betreff, text(varchar)
..
Benutzer:
login (varchar) primärschlüssel
..
verteiler_benutzer:
nachricht_id (int) primärschlüssel
benutzer_login (varchar) primärschlüssel
verteiler_gruppen:
gruppen_id (varchar) primärschlüssel
nachricht_id (int)primärschlüssel
nachrichten_gelesen:
nachricht_id (int) primärschlüssel
benutzer_login (varchar) primärschlüssel
bemerkung: damit diese tabelle nicht irgendwann riesengroß wird, gilt eine nachricht als gelesen, wenn in dieser tabelle KEIN eintrag für die nachricht vorhanden ist.
mein bisheriges query:
Leider komme ich nicht auf ein query, welches mir die datensätze zuerst nach gelesen /ungelesen (neue zuerst) und dann nach datum sortiert ausspuckt..
ich hoffe es hat jemand eine idee und kann mir helfen!!
Vielen Dank!
Gruß
Nico
Ich habe ein nachrichtensystem auf Mysql /php basis entwickelt, in welchem nachrichten an benutzer und/oder gruppen geschickt werden. Damit nachrichten auch als gelesen / ungelesen markiert sein können, musste ich eine extra tabelle die diese information enthält (benutzer_id und nachricht_id) anlegen. klappt prima.
Jetzt wird von mir verlangt, den nachrichten eingang nicht nur nach datum zu sortieren, sondern erst nach gelesen / ungelesen und dann nach datum.
meine tabellen sehen so aus:
Nachrichten:
id (int, autoinc) primärschlüssel
datum (datetime)
betreff, text(varchar)
..
Benutzer:
login (varchar) primärschlüssel
..
verteiler_benutzer:
nachricht_id (int) primärschlüssel
benutzer_login (varchar) primärschlüssel
verteiler_gruppen:
gruppen_id (varchar) primärschlüssel
nachricht_id (int)primärschlüssel
nachrichten_gelesen:
nachricht_id (int) primärschlüssel
benutzer_login (varchar) primärschlüssel
bemerkung: damit diese tabelle nicht irgendwann riesengroß wird, gilt eine nachricht als gelesen, wenn in dieser tabelle KEIN eintrag für die nachricht vorhanden ist.
mein bisheriges query:
Code:
SELECT * FROM nachrichten WHERE (id in (SELECT nachricht_id FROM verteiler_benutzer WHERE benutzer_id="'.$user_login.'") or id in (SELECT nachricht_id FROM verteiler_gruppen WHERE gruppen_id="'.$gruppe.'")) ORDER BY datum DESC;
ich hoffe es hat jemand eine idee und kann mir helfen!!
Vielen Dank!
Gruß
Nico
Kommentar