dedlfix: [MySQL] 1:n Beziehung alles in einem query abfragen.

Beitrag lesen

Hi!

Wie kann ich nun in einem query alle Daten abfragen?
[...]
Dies würde klappen, wenn ich wüsste wieviele Datensätze sich aus message_zusatz auf messages beziehen (im oben genannten query sind es 2) die Anzahl kann jedoch variieren von message zu message.

Da du das aber nicht weißt, ist dieser Weg nicht möglich. Du willst quasi aus "senkrechten Daten" mit noch dazu unterschiedlicher Anzahl "waagerechte Daten" machen. Die Anzahl der "waagerechten Daten" ist feststehend und durch die SELECT-Klausel vorgegeben. Man kann sie nicht erweitern, nur verkürzen im gewissen Sinne, wenn man NULL-Werte für nicht belegte Spalten zurückliefert.

Mir fallen vier Wege ein:

  • Ein einfacher (LEFT) JOIN, dann hast du aber das Problem der Wiederholung der messages-Datensätze je Zusatz.
  • Eine rekursive Abfrage - die man im Prinzip vermeiden will, weil sie eine Menge Einzelanfragen bedeutet.
  • Erst Messages abfragen und eine zweite mit WHERE messageid IN (IDs der Messages aus dem ersten Ergebnis). Nur zwei Abfragen, aber die Zuordnung muss im abfragenden Programm erfolgen.
  • GROUP BY und GROUP_CONCAT(). Damit bekommst du alle Zusätze pro Message als einen String mit Trennzeichen.

Lo!