Tach!
Jetzt möchte ich natürlich eine Suche ermöglichen, in der nach Werten aus jeder der Personen-Tabelle und auch aus der Info-Tabelle gesucht wird, aber nicht für jeden gefundenen Wert aus der Info-Tabelle ein neuer Satz wird, sondern in der Ergebnistabelle pro Person nur eine Zeile gezeigt wird, alle Werte aus der Info-Tabelle in einem Feld in der Tabelle.
Um mehrere Datensätze zu einem zusammenzufassen gibt es (außer selbst geschriebenen Routinen) die Funktion GROUP_CONCAT(). Dazu erstellst du eine gejointe Abfrage und gruppierst über die Werte aus der Personentabelle. Das Ergebnis davon ist ein Info-Feld, in dem alle Daten trennzeichensepariert stehen. Das ist gut so, wenn du sie sowieso in der Form brauchst, bei Einzelverarbeitung aber eher ungünstig.
Ich habe noch versucht, dies dann in der Schleife bei der Ausgabe zu berücksichtigen, aber es scheint mir sehr aufwändig, zu prüfen ob sich der Name geändert hat und wenn dann erst die Informationen des Eintrags davor auszugeben.
Sowas nennt sich Gruppenwechsel und ist nicht gerade unüblich. Dazu braucht man eigentlich nur eine Variable zum Merken des vorhergehenden Wertes und ein if zum Vergleichen des aktuellen mit diesem.
Eine zweite Idee ist, mit einer Single-Abfrage zu garantieren, dass nur 1 Satz pro Person gesammelt wird und in der Schleife dann mit einem neuen Select immer wieder neu die Daten aus der Tabelle Infos zu holen.
Rekursive Abfragen sind nicht sehr beliebt, weil sie viele Roundtrips verursachen. Mit zwei Abfragen kommst du aus, wenn du zunächst die Personen abfragst, dir deren Daten erstmal zwischenspeicherst und dabei die IDs extra aufhebst. Die zweite Abfrage holt zu diesen IDs die Infotabellendaten. Diese sortierst du in ein Array of Arrays. Im äußeren sind die Keys die IDs der Personen und die Wete sind wiederum Arrays, in deren Elemente du die einzelnen Info-Daten schreibst. Am Ende kannst du durch deine gemerkten Personen "foreachen" und hast dazu jeweils einen Eintrag in der Info-Tabelle, durch den du ebenfalls durchlaufen kannst.
dedlfix.