Sonja: 2 Tabellen zusammen anzeigen lassen mySQL

Hi Forum,

ich habe zwei Tabellen.

1. Personendaten
person_id (index)
person_name
...

2. Frage & Antworten
frage_id (index)
frage_nr (1 bis 10)
frage_person_id (Verknüpfung)
frage_frage (immer die gleiche Fragen für eine Person)
frage_amtwort (immer unterschiedliche Antworten)

Verbindung
person_id=frage_person_id

Die Person gibt in die erste Tabelle seine Daten ein.
Danach wird in die zweite Tabelle zehn Antworten geschrieben.
frage_nr hat immer den Wert 1 bis 10

Jetzt möchte ich die Ergebnisse anzeigen lassen, in der Form:
In jeder Zeile steht "eine" Person und seine Antworten

Peter, antwort1, antwort2 usw... bis 10
Michael, antwort1, antwort2 usw... bis 10
usw...

Ich hoffe ich konnte meine Frage richtig stellen.
Bin für jede Antwort dankbar.

SELECT person_name, frage_antwort FROM Person, frage WHERE person_id=frage_person_id

Schreib das Ergebnis untereinander, was ich ja nicht möchte ;-(

  1. Natürlich:

    person_id (Primärschlüssel)
    frage_id (Primärschlüssel)

  2. Hallo Sonja,

    1. Personendaten
      person_id (index)
      person_name
      ...
    1. Frage & Antworten
      frage_id (index)
      frage_nr (1 bis 10)
      frage_person_id (Verknüpfung)
      frage_frage (immer die gleiche Fragen für eine Person)
      frage_amtwort (immer unterschiedliche Antworten)

    und Optimierungs- sprich Normalisierungspotential :-)
    Nutze statt dieser kombinierten Tabelle zwei Tabellen. Du hast eine typische n:m-Beziehung zwischen Personen und Fragen: eine Person kann mehreren Fragen zugeordnet sein und eine Frage kann mehreren Personen zugeordnet sein. Zusätzlich zur Zuordnung über die beiden IDs hat die Zuordnung ein eigenes Attribut: die Antwort.

    1. Personendaten
    person_id,
    person_name,
    ...

    2. Fragen
    frage_id,
    frage,
    ...

    3. Antworten
    person_id,
    frage_id,
    antwort,
    ...
    ggf. ein künstlicher Schlüssel.
    Wenn eine Person jede Frage nur einmal beantworten darf, solltest Du die Spaltenkombination person_id, frage_id mit einem eindeutigen Index (also einem Mehrspaltenindex) versehen.

    Jetzt möchte ich die Ergebnisse anzeigen lassen, in der Form:
    In jeder Zeile steht "eine" Person und seine Antworten

    Peter, antwort1, antwort2 usw... bis 10
    Michael, antwort1, antwort2 usw... bis 10
    usw...

    Du suchst eine Kreuztabellenabfrage. Die schlechte Nachricht ist die, dass MySQL keine Kreuztabellenabfragen beherrscht. Falls Du konstant bei 10 Fragen bleibst, lohnt es sich nicht, diese Abfrage programmgesteuert zu erstellen.

    Von Zeit zu Zeit taucht eine vergleichbare Frage hier auf, ich verlinke Dir ein paar Beispielthreads:

    Minitutorial für MS SQL Server 2000
    </archiv/2008/6/t173119/#m1136008>
    </archiv/2009/3/t184124/#m1220523>

    Freundliche Grüße

    Vinzenz