2 Tabellen zusammen anzeigen lassen mySQL
Sonja
- datenbank
0 Sonja0 Vinzenz Mai
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 ;-(
Natürlich:
person_id (Primärschlüssel)
frage_id (Primärschlüssel)
Hallo Sonja,
- Personendaten
person_id (index)
person_name
...
- 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 AntwortenPeter, 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