Ich brauche Hilfe dabei, Daten aus mehreren Tabellen zu bekommen.
Das sind die Tabellen, die ich habe:
_______________ ______________ ___________ _______________ _____________
|_tblUsers____| |_tblAnswers__| |_tblAlt__| |_tblQuestion_| |_survey_____|
| userID | | answerAltID | | altID | | questID | | surveyID |
| username | | userID | | altText | | questText | | surveyName |
|_____________| |_____________| |_questID_| |_surveyID____| |____________|
TblUsers enthält eine Liste der Benutzer im System, tblAnswers hat alle Antworten, die von Benutzern gegeben wurden, tblAlt enthält Alternativen zu einer Frage, und tblQuestion hat die Fragen. Es gibt noch eine Tabelle namens tblSurveys, aber die wird hier nicht benötigt, da die ID in der tblQuestion erwähnt wird.
Das ist, was ich bisher habe:
SELECT
tblQuestion.questText,
tblAlt.altText,
Count(tblAnswers.answerID) as answers_count,
(SELECT COUNT(answerID) FROM tblAnswers, tblAlt
WHERE tblAnswers.answerAltID = tblAlt.altID
AND tblAlt.questID = " & CInt(questionID) & ") as total_count
FROM tblAlt, tblQuestion
LEFT JOIN tblAnswers ON (tblAlt.altId = tblAnswers.altID)
WHERE tblAlt.questID = " & CInt(questionID) & "
GROUP BY tblAlt.altText;
Dies liefert Zeilen wie diese:
| Was ist blablabla? | Die Antwort ist... | 2 (haben geantwortet) | 10 (insgesamt geantwortet) |
Leider liefert dies nur alle Zeilen für eine Frage zurück. Gibt es eine Möglichkeit, alle Zeilen zu erhalten, die zu derselben Umfrage gehören (basierend auf surveyID)?
Wenn ich möchte, dass die Ausgabe so aussieht:
| Was ist blablabla? | Die Antwort ist... | 2 (haben geantwortet) | 10 (gesamt geantwortet) | Name der Umfrage |
Ich möchte ALLE Alternativen zurückgeben (mit Angabe, wie viele geantwortet haben, Gesamtanzahl der Antworten, zugehörige Frage und Umfrage).
Aktualisierung:
Das ist meine Eingabe:
SELECT tblalternativ.altTekst, tblalternativ.altID, Count(tblsvar.svarAltID) as antSvar,
(SELECT COUNT(*) FROM tblsvar, tblalternativ
WHERE tblsvar.svarAltID = tblalternativ.altID
AND tblalternativ.altSpmID = " & CInt(lblQuestion.Tag) & ") as antTotal,
(SELECT Count(*) FROM tblalternativ WHERE altSpmID = " & CInt(lblQuestion.Tag) & ") as spmTotal
FROM(tblalternativ) LEFT JOIN tblsvar ON (tblalternativ.altId = tblsvar.svarAltID)
WHERE(tblalternativ.altSpmID = " & CInt(lblQuestion.Tag) & ")
GROUP BY tblalternativ.altTekst ORDER BY tblalternativ.altID ASC
Meine Ausgabe:
altTekst altID antSvar antTotal spmTotal
Black 83 1 3 5
Green 84 1 3 5
Yellow 85 1 3 5
White 86 0 3 5
Pink 87 0 3 5
Aber das zeigt nur Statistiken für eine Frage an. Ich möchte die Statistiken für alle Fragen in einer Umfrage anzeigen. Also muss ich alle altTekst
für diese Umfrage, den Fragennamen und die ID der Umfrage bekommen.
Ich möchte:
spmTekst altTekst altID antSvar antTotal spmTotal evalID
Was ist... Black 83 1 3 5 1
Was ist... Green 84 1 3 5 1
Was ist... Yellow 85 1 3 5 1
Was ist... White 86 0 3 5 1
Was ist... Pink 87 0 3 5 1
Wer ist.... Der König 88 2 3 3 1
Wer ist.... Der Papst 89 0 3 3 1
Wer ist.... Der Präsident 90 1 3 3 1
Welcher.... Schuh 91 2 3 2 1
Welcher.... Hut 92 1 3 2 1
Mit anderen Worten möchte ich die Statistiken für alle Fragen in derselben Umfrage anzeigen (basierend auf evalID).