2011-01-17 11 views
2

Ich habe 3 Tabellen; Posteingang, Postausgang und Nachrichten.MySQL mehrere Schlüssel in einer einzigen Zeile

Für eine einzelne Nachricht sehen die Daten so aus.

Nachricht:

+----------+----------------+ 
|message_id|content   | 
+----------+----------------+ 
|1   |'lorem ipsum...'| 

Posteingang:

+--------+----------+-----+-------+ 
|inbox_id|message_id|to_id|from_id| 
+--------+----------+-----+-------+ 
|1  |1   |1 |1  | 
|2  |1   |2 |1  | 
|3  |1   |3 |1  | 

Outbox:

+---------+----------+-----+-------+ 
|outbox_id|message_id|to_id|from_id| 
+---------+----------+-----+-------+ 
|1  |1   |1,2,3|1  | 

Ein einzelner Benutzer PMs an mehrere Personen schicken. Für jeden Empfänger wird ein neuer Inbox-Datensatz generiert.

Wie jetzt, im Generieren eines Outbox-Datensatzes unabhängig von Empfängern.

Nach Senden einer PM kann ich genau die oben gezeigten Daten erzeugen, aber ich habe Probleme, Benutzernamen für den Ausgang zu generieren.

Ich würde gerne in der Lage sein, so etwas für den Ausgang zu tun (die folgende Abfrage ist, was ich erreichen möchte, aber natürlich nicht funktioniert).

SELECT 
    users.username, 
    messages.message_id, 
    messages.subject 
FROM 
    messages 
JOIN 
    outbox ON outbox.message_id = message.message_id 
JOIN 
    users ON users.user_id IN (outbox.to_id) 
WHERE 
    outbox.from_id = 1 

Das Ergebnis Ende

+-------------------+----------+----------------+ 
|username   |message_id|subject   | 
+-------------------+----------+----------------+ 
|user1, user2, user3|1   |'lorem ipsum...'| 

Antwort

4

MySQL ist IN funktioniert nicht so, wie Sie denken, es tut. outbox.to_id ist ein String und users.user_id ist ein Int. MySQL versucht, to_id in ein int zu konvertieren, und stoppt, wenn es an das ',' (das erste nicht-int-Zeichen) kommt, daher wird '1,2,3' in '1' umgewandelt.

This question dass ich fragte, wird Ihnen helfen, lesen Sie die angenommene Antwort.

Ich schlage vor, dass anstatt "1,2,3" in einem Feld zu speichern, Sie separate Zeilen für jeden Benutzer haben, an den die E-Mail gesendet wird.

+0

Ich hatte Angst, dass das die Antwort sein würde. Vielen Dank für Ihre Hilfe, mein Herr! – castis

+0

Ja, das Speichern einer Liste von IDs in einem Feld ist nicht die beste Idee. Das habe ich auch gelernt. Sie können/tun es, aber es ist nicht die beste Option. –

Verwandte Themen