Hallo in die Runde,
ich weiß nicht, ob es keine Lösung für meine Idee gibt oder ob ich gerade zu blind bin sie zu sehen … Daher hier diese Frage:
Ich habe eine große Tabelle, aus der ich ein paar Datensätze auswähle, die einem Kriterium entsprechen:
Select ID, Nr from tabelle_haupt Where Nr = „Suchbegriff“
Das funktioniert natürlich und gibt im Beispielfall 7 von ca. 1,3 Mio Datensätzen.
Nun habe ich eine weitere Tabelle, die zusätzliche Nummern zu den Datensätzen in der Haupttabelle enthält (1:n), durchschnittlich etwa 4 Stück pro Datensatz. Ich möchte nun in einer Abfrage alle Datensätze aus der Haupttabelle, die dem Suchkriterium entsprechen mit allen Einträgen aus der Zusatztabelle haben, allerdings soll der Hauptdatensatz dabei nicht mehrfach erscheinen, wie das hier passiert (da werden dann ja z. B. ca. 7x4 = 28 Datensätze als Ergebnis geliefert):
Select th.ID, th.Nr, tn.Nr_2 from tabelle_haupt th
Left Join tabelle_neben tn on th.ID = tn.DS_ID
Where Nr = „Suchbegriff“
Sondern die Zusatzinformationen sollen zusammen gefasst werden, z. B. als Liste („Nr1, Nr2, Nr3“). Dafür gibts ja Group_Concat(). Aber wenn ich das auf die Daten aus der Nebentabelle anwende:
Select th.ID, th.Nr, Group_Concat(tn.Nr_2) from tabelle_haupt th
Left Join tabelle_neben tn on th.ID = tn.DS_ID
Where Nr = „Suchbegriff“
bekomme ich nur noch einen Datensatz, der alle (auch die den anderen Datensätzen) zugeordneten Nebennummern zusammengefasst enthält. Das ist aber nicht das gewünschte Ergebnis. Distinct reduziert mir das Ergebnis auch auf einen Datensatz …
Denke ich in die falsche Richtung ? Hat jemand einen Tipp, ob das in einer Abfrage gelöst werden kann. Die ALternative wäre natürlich, diverse Schleifen in dem PHP Skript zu bauen, das die Abfrage ausführt…
Danke im Voraus, Lo.