SQL: Gegeben:Ein Problem; Gesucht:SQL-Anfrage
    
Notschko
    
    
      
    
  - datenbank
 nicht angemeldet
 nicht angemeldetAls 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