Gruppierte Ausgabe von Daten aus 3 Tabellen

Hallo,

ich katalogisiere über ein PHP-Skript in Verbindung mit einer MySQL-Datenbank meine Zeitschriftensammlung. Bislang habe ich dies über zwei Tabellen getan:

  • Zeitschriften: Hier sind die grundlegenden Daten zu einer Zeitschrift abgelegt (z.B. „Der Spiegel“, „stern“, etc.) und eine Länderzuordnung. Weitere Angaben sind Erscheinungsweise, Erscheinungszeitraum, Kontaktdaten, etc. - quasi alle grundlegend statischen Daten zu einer Zeitschrift.

  • Ausgaben: Hier sind alle Ausgaben einer Zeitschrift abgelegt. Als Zuordnung wird die ID der Zeitschrift aus der anderen Tabelle verwendet. Hier werden alle spezifischen Daten einer einzelnen Ausgabe abgelegt: Seitenanzahl, Format, Auflage, etc.

Jetzt habe ich einige doppelte Ausgaben angesammelt, die ich in einer dritten Tabelle eintrage. Hier findet die Zuordnung über die ID der Ausgabe statt.

Mein Problem ist jetzt, diese doppelten Ausgaben in einer ansprechenden Tabelle auszugeben. Ich finde keinen eleganten Weg, dies umzusetzen. Mittels einer SQL-Abfrage über 3 Tabellen? Oder alternativ alle Daten auslesen, in ein Array schreiben und darüber gruppieren und sortieren?

Evt. hat mir hier jemand einen eleganten Rat. Ich probiere seit Ewigkeiten hin und her und bekomme es nicht hin.

Anbei meine Datenbankstruktur, gekürzt auf die relevanten Felder:

Tabelle 1: Zeitschriften

  • ID
  • Land
  • Zeitschrift (Name)

Tabelle 2: Ausgaben

  • ID
  • Zeitschrift (ID aus Tabelle Zeitschriften)
  • Ausgabe (Nummer)
  • Seiten
  • Format

Tabelle 3: Doppelte

  • ID
  • Ausgabe (ID aus Tabelle Ausgaben)

Wenn ich jetzt die doppelten Zeitschriften-Ausgaben ausgeben möchte, sollte dies in folgender Darstellung geschehen:

Deutschland

  • Zeitschrift 1: 01, 02, 03…
  • Zeitschrift 2: 02
  • Zeitschrift 3: 01

Österreich

  • Zeitschrift 1: 05
  • Zeitschrift 2: 01, 02

Schweiz

  • Zeitschrift 1: 01

Mein Problem: Eigentlich müsste ich nur die Tabelle „Doppelte“ abfragen und die Ergebnisse ausgeben. Die Krux dabei ist aber, dass dort nur auf eine Ausgabe der Tabelle „Ausgaben“ bezuggenommen wird. Sprich ich müsste zeitgleich auch die Tabelle „Ausgaben“ abfragen. Dort wiederum ist aber der Zeitschriftenname und das Land nicht abgelegt, so dass ich auch die Tabelle „Zeitschriften“ benötige.

Ich hoffe, ihr versteht meine Problematik und habt den ein oder anderen Rat für mich, wir ich am besten vorgehe :slight_smile:

Liebe Grüße

Hallo!
Kannst du die doppelten Ausgaben denn eindeutig voneinander unterscheiden? Z.B. durch eine seriennummer, die du auf diese geschrieben hast? Nur dann würde die dritte Tabelle Sinn machen. Dort würde ich dann aber auch die Seriennummern einzelner Exemplare eintragen, das macht die Datenlage sauberer.
Falls NICHT, würde es stattdessen mehr Sinn machen, der zweiten Tabelle eine weitere Spalte für die Anzahl der Exemplare zu verpassen.

Gehen wir von meinem Vorschlag aus:

SELECT t1.Land, t1.Zeitschriftname, t2.Ausgabe, t2.Seiten, t2.Format, t2.Anzahl
FROM Tabelle1 t1
LEFT JOIN Tabelle2 t2 ON (t1.ID = t2.Zeitschrift) 
ORDER BY t1.Land, t1.Zeitschriftname, t2.Ausgabe
WHERE t2.Anzahl > 1

liefert dir eine sortierte Liste von allen Zeitschriften, von denen du mehr als eine hast. Es ist dann Sache vonm PHP, daraus die gewünschte Darstellung zu generieren.

Alternativ könntest du zunächst alle Zeitschriften eines Landes abrufen, und anschließend für jede die Ausgaben und die Anzahl. Daduch sparst du dir zu erkennen, wann in der obigen Ausgabe ne Zeile für das nächste Land beginnt etc.