MySQL - Frage, 1:n, Abfrageerbenis in einer Abfrage
markus
- datenbank
Morgen, ich sitze gerade daran eine MySQL Datenbank aufzubauen. Habe nur Erfahrung mit dem Umgang von Access Datenbanken.
Ich würde gerne eine 1:n Beziehung realisieren.
Diese Abfrage habe ich bis jetzt:
SELECT umfragen.header, umfragenantworten.Antwort
FROM umfragen
LEFT JOIN (umfragenantworten)
ON(umfragenantworten.UmfrageID=umfragen.ID)
WHERE Umfragen.ID = 1
Ist das so korrekt oder muss ich noch was anpassen? Ich komm mit der MySQL doku nicht so zurecht.
Es sollen n umfrageantworten, 1 Umfrage zugeordnet werden.
Die zweite Frage ist, kann ich diese Anweisung verwenden bzw erweitern und in der WHERE-Klausel angeben, das ich nur die Umfragen.ID mit der höchsten ID verwenden möchte?
So etwas wie SELECT id FROM Umfragen DESC, LIMIT 0, 1 (das ist aus dem kopf geschrieben und ich garantiere nicht für die Richtigkeit ^^)
gruss markus
Ich würde gerne eine 1:n Beziehung realisieren.
SELECT umfragen.header, umfragenantworten.Antwort
FROMumfragen
LEFT JOIN (umfragenantworten)
ON(umfragenantworten.UmfrageID=umfragen.ID)
WHERE Umfragen.ID = 1
Ich denke, dass du damit einen Tabelle 'umfragen' angelegt hast mit folgender Struktur:
umfragen(ID,header)
Und eine Tabelle 'umfragenantworten' mit folgender Struktur:
umfragenantworten(ID,UmfrageID,Antwort)
Das wäre soweit korrekt. Wenn du nun die Antworten zu einer Umfrage haben willst, dann schreibe:
SELECT ua.Antwort
FROM umfragenantworten AS ua, umfragen AS u
WHERE ua.UmfrageID = u.ID
Danke, für die schnelle Antwort. So weit war ich auch schon und dann hab ich das mit den JOINS gelesen, ich vertrau dir einfach mal, beides funktioniert.
Bleibt nur noch die zweite Frage, wie ich das Abfrageergebnis auf die höchste Umfrage.ID beschränken kann.
Danke, für die schnelle Antwort. So weit war ich auch schon und dann hab ich das mit den JOINS gelesen, ich vertrau dir einfach mal, beides funktioniert.
Meine Variante ist, glaube ich, nur eine die allgemeine Form. Mit leftjoin etc. legt man nur fest, wie die Tabellen "zusammmengeklebt" werden.
Bleibt nur noch die zweite Frage, wie ich das Abfrageergebnis auf die höchste Umfrage.ID beschränken kann.
Da bin ich mir auch nicht sicher. Aber es funktioniert mit MAX. Vielleicht so?
SELECT ua.Antwort
FROM umfragenantworten AS ua, umfragen AS u
WHERE ua.UmfrageID = (SELECT MAX(umfragen.ID) FROM umfragen)
Ich bin mir aber nicht mit der Art der Klammern sicher. Schau mal bei geschachtelten Abfragen nach.