Hi,
ich bin gerade am Arbeiten an einem Nachrichten-Modul.
Damit soll es möglich sein, mehreren Gruppen und/oder mehreren Benutzern Nachrichten zu schreiben (über die Datenbank).
Folgende Datenbanktabelle habe ich mir überlegt:
| id | empfaenger_id | switch | absender_id | betreff | nachricht | gelesen | del | zeitpunkt |
Ich habe mir gedacht man definiert in der Spalte "switch", ob es an eine Gruppe oder an einen Benutzer gesendet wird (ENUM 'user_id', 'group_id').
Wenn beispielsweise in der Switch-Spalte "user_id" steht, wird die Spalte empfaenger_id als user_id gewertet, genauso bei Gruppen.
In der Spalte "gelesen" wird protokolliert, ob der Benutzer die Nachricht gelesen hat, damit beispielsweise auf der Startseite nicht angezeigt wird, dass man neue Nachrichten habe. Doch wie kann man das am besten umsetzen? Ich dachte spontan an ein Mousover (d.h. mit der Maus über den Text der Nachricht fahren), aber wenn man dann bei jedem Mouseover eine DB-Query macht, ich weiß ja nicht.
Oder wäre es einfach besser eine Liste mit den Betreffen anzuzeigen und sobald man auf den Betreff klickt wird die DB-Query ausgeführt?
In der Spalte "del" wird dann gesagt, ob der Absender die Nachricht gelöscht haben wollte -> sie wird dem Empfänger nicht mehr angezeigt. Oder sollte man sie dann nicht einfach ganz löschen?
Soweit der Plan, doch jetzt kam mir ein grundlegendes Problem entgegen. Das funktioniert nur als 1 Absender zu 1 Empfänger, ich wollte es aber gerade mit mehreren Empfängern haben und dann sollen die Empfänger noch unterschiedlich sein können (d.h. Gruppen und Benutzer dürfen Empfänger sein bei der selben Nachricht).
Wie muss ich da vorgehen? Ich dachte jetzt spontan an eine zweite Tabelle die dann die Id der Nachricht (Tabelle nachrichten) mit den Benutzer-IDs und Gruppen-IDs verknüpft.
Ungefähr so:
| nachricht_id | empfaenger_id | switch |
Doch wie müsste nun eine Query zum Eintragen und zum Abfragen aussehen?
Für das Absenden bräuchte man dann ja auf jeden Fall mehrere Querys.
Beim Abfragen einen Nachricht:
erstes Fragezeichen: aktuelle user_id
zweites Fragezeichen: "user_id"
drittes Fragezeichen: "1"
Hierbei habe ich keine Idee, wie der Gruppen-Teil aussehen kann.
Achja, meine Gruppen-Tabelle (groups):
| group_id | group_name |
Die Tabelle mit den Gruppen-Benutzer-Zuordnungen (users_groups):
| user_id | group_id |
MfG
ich bin gerade am Arbeiten an einem Nachrichten-Modul.
Damit soll es möglich sein, mehreren Gruppen und/oder mehreren Benutzern Nachrichten zu schreiben (über die Datenbank).
Folgende Datenbanktabelle habe ich mir überlegt:
| id | empfaenger_id | switch | absender_id | betreff | nachricht | gelesen | del | zeitpunkt |
Ich habe mir gedacht man definiert in der Spalte "switch", ob es an eine Gruppe oder an einen Benutzer gesendet wird (ENUM 'user_id', 'group_id').
Wenn beispielsweise in der Switch-Spalte "user_id" steht, wird die Spalte empfaenger_id als user_id gewertet, genauso bei Gruppen.
In der Spalte "gelesen" wird protokolliert, ob der Benutzer die Nachricht gelesen hat, damit beispielsweise auf der Startseite nicht angezeigt wird, dass man neue Nachrichten habe. Doch wie kann man das am besten umsetzen? Ich dachte spontan an ein Mousover (d.h. mit der Maus über den Text der Nachricht fahren), aber wenn man dann bei jedem Mouseover eine DB-Query macht, ich weiß ja nicht.
Oder wäre es einfach besser eine Liste mit den Betreffen anzuzeigen und sobald man auf den Betreff klickt wird die DB-Query ausgeführt?
In der Spalte "del" wird dann gesagt, ob der Absender die Nachricht gelöscht haben wollte -> sie wird dem Empfänger nicht mehr angezeigt. Oder sollte man sie dann nicht einfach ganz löschen?
Soweit der Plan, doch jetzt kam mir ein grundlegendes Problem entgegen. Das funktioniert nur als 1 Absender zu 1 Empfänger, ich wollte es aber gerade mit mehreren Empfängern haben und dann sollen die Empfänger noch unterschiedlich sein können (d.h. Gruppen und Benutzer dürfen Empfänger sein bei der selben Nachricht).
Wie muss ich da vorgehen? Ich dachte jetzt spontan an eine zweite Tabelle die dann die Id der Nachricht (Tabelle nachrichten) mit den Benutzer-IDs und Gruppen-IDs verknüpft.
Ungefähr so:
| nachricht_id | empfaenger_id | switch |
Doch wie müsste nun eine Query zum Eintragen und zum Abfragen aussehen?
Für das Absenden bräuchte man dann ja auf jeden Fall mehrere Querys.
Beim Abfragen einen Nachricht:
Code:
SELECT
n. id,
n. absender_id,
n.betreff,
n.nachricht,
n.zeitpunkt
FROM nachrichten n
LEFT JOIN nachrichten_empfaenger ne
ON ne.nachricht_id = n.id
WHERE ((ne.empfaenger_id = ? AND ne.switch = ? ) OR (gucken ob benutzer in einer gruppe ist, die die nachricht bekommen hat)) AND n.del != ?
zweites Fragezeichen: "user_id"
drittes Fragezeichen: "1"
Hierbei habe ich keine Idee, wie der Gruppen-Teil aussehen kann.
Achja, meine Gruppen-Tabelle (groups):
| group_id | group_name |
Die Tabelle mit den Gruppen-Benutzer-Zuordnungen (users_groups):
| user_id | group_id |
MfG