Got 2 Tische - Kontakte und Nachrichten:MySQL - Anzeige/verknüpften Datensätze zählen, wenn "normale" Join ist unmöglich
contact_id | contact_email
1 | [email protected]
2 | [email protected]
3 | [email protected]
message_id | message_recipients
1 | 1,2,3
2 | 3
message_recipients
Feld enthält ID (s) des Kontakts (n) Nachricht zugewiesen wurde. Jeder Nachricht können eine oder mehrere IDs zugewiesen werden, sodass sie durch das Symbol ,
getrennt sind.
Ich muss alle Kontakte anzeigen, und Anzahl der Nachrichten werden jedem Kontakt zugewiesen. Da message_recipients
Feld mehrere IDs enthalten kann, kann ich keine Abfrage wie SELECT * FROM contacts, messages WHERE contacts.contact_id=messages.message_recipients
ausführen, da es nicht ordnungsgemäß funktioniert.
Wenn ich SELECT * FROM contacts FULL JOIN messages
ausführen, gibt es viele doppelte Zeilen aus contacts
Tabelle. Sicher, ich kann SELECT * FROM contacts FULL JOIN messages GROUP BY contact_id
ausführen, aber dieser gibt nur die erste Nachricht von messages
Tabelle zurück.
Ich weiß, dass ich wahrscheinlich message_recipients
Feld aus jeder Zeile in Array explodieren und Code wie if (in_array($contact_id, $message_recipients_array)) {$total++;}
oder ähnliches verwenden muss, um zu zählen, wie viele Nachrichten jedem Kontakt zugewiesen wurde. Jetzt geht es mir hauptsächlich darum, wie ich alles benötige, indem ich so einfach wie möglich schreibe.
Fixieren Sie Ihre Tabellenstruktur. ** Speichern Sie nicht mehrere Werte in einer Zelle **. Siehe [** Normalisierung **] (https://en.wikipedia.org/wiki/Datenbank_normierung) – GurV
Kommentare wie sollte es aussehen? Sicher, ich kann immer eine ID im Feld message_recipients speichern, aber in diesem Fall wird die Nachrichtentabelle mit Hunderten von doppelten Datensätzen gefüllt (wobei nur das ID-Feld unterschiedlich ist, während Felder mit Nachrichtentext und anderen Details identisch sind). Ich denke nicht, dass es eine gute Übung ist. –