SQL: Gegeben:Ein Problem; Gesucht:SQL-Anfrage
Notschko
- datenbank
Als Datenbank verwende ich MySQL5.
Ich implementiere ein Mail-System in PHP, welches aus 4Datenbank-Tabellen besteht.
mitglieder
--------------------------
m_id(int)
name(text)
--------------------------
mail
---------------------------
mail_id(int)
nachricht(text)
---------------------------
mail_ausgang
---------------------------
ausgang_id(int)
von_id(int)
an_ids(text) // Speichert alle IDs (Trennzeichen ist ein Komma) der Mitglieder, an die die Mail gesendet wurde
datum(datetime)
betreff(text)
mail_id
---------------------------
mail_eingang
---------------------------
eingang_id(int)
von_id(int)
an_id(int)
datum(datetime)
betreff(text)
mail_id
---------------------------
Ich suche einen (oder auch mehrere) SQL-Befehl(e) mit dem ich für jeden mail_ausgang-Eintrag alle Namen der Empfänger erhalte.
Es sollte jedoch keine SQL-Anfrage in einer Schleife ausgeführt werden, da dies den Server zu sehr auslastet.
Habt ihr irgendwelche Ideen?
Danke!
Gruß, Notschko
hi,
mail_ausgang
ausgang_id(int)
von_id(int)
an_ids(text) // Speichert alle IDs (Trennzeichen ist ein Komma) der Mitglieder, an die die Mail gesendet wurde
Ungünstig.
Vernünftig Normalisieren erschiene mir an dieser Stelle besser.
datum(datetime)
betreff(text)
mail_id
Warum liegen diese Daten nicht direkt an der Nachricht?
mail_eingang
Brauchst du überhaupt einen separaten Ein- und Ausgang?
Wenn du ablegst, wer eine Nachricht an wen sendet, hast du doch damit Ein- und Ausgang implizit.
Ich suche einen (oder auch mehrere) SQL-Befehl(e) mit dem ich für jeden mail_ausgang-Eintrag alle Namen der Empfänger erhalte.
Es sollte jedoch keine SQL-Anfrage in einer Schleife ausgeführt werden, da dies den Server zu sehr auslastet.
Habt ihr irgendwelche Ideen?
Beschäftige dich, nachdem du das Datenmodell verbessert hast, mit JOINs.
http://aktuell.de.selfhtml.org/artikel/datenbanken/joins/
http://aktuell.de.selfhtml.org/artikel/datenbanken/fortgeschrittene-joins/
gruß,
wahsaga
yo,
zum einen solltest du dein datenbank-design ändern, so wie wahsaga gesagt hat. zum anderen kannst du ein workaround nehmen, indem du zwei abfragen kombinierst.
die erste holt die spalte an_ids von der tabelle mail ausgang. die zweite abfrage benutzt die spalte mit den komma getrennten werden empfänger als string in der zweiten abfrage und dem IN operator.
SELECT *
FROM mitglieder
WHERE id IN (hier_string_der_ersten_abfrage)
Ilja