Mehrere counts bei Umfragesystem
gottlieb
- datenbank
Hallo Forum,
beziehend auf diese Struktur der Datenbank:
http://forum.de.selfhtml.org/archiv/2008/3/t167903/#m1095259
wollte ich fragen, wie ich die Anzahl der abgegebenen Stimmen für jeweils eine Umfrage erhalte, da ich ja in der Query erst ermitteln muss, wieviele AnswerId's vorhanden sind und dann später in t_PollResults wieviele Treffer je AnswerId's vorhanden sind.
Bsp: t_PollAnswers:
AnswerId PollId Answer
8 2 Spanien
9 2 Frankreich
10 2 Italien
11 2 Deutschland
12 3 Ja
13 3 Nein
14 3 Vielleicht
Bsp: t_PollResults:
ResultId AnswerId UserID
1 8 123
2 9 456
3 8 999
4 17 888
5 10 777
6 10 666
Jetzt muss ich ermitteln, wieviel AnwerID's für die PollID 2 vorhanden sind und hier jeweils immer die Counts.
Geht das direkt in der Query oder sollte ich irgendwie alles auslesen und mit einer While-Schleife dann im JavaCooe alles sortieren/zählen.
Grüße
Hallo
beziehend auf diese Struktur der Datenbank:
http://forum.de.selfhtml.org/archiv/2008/3/t167903/#m1095259
wollte ich fragen, wie ich die Anzahl der abgegebenen Stimmen für jeweils eine Umfrage erhalte, da ich ja in der Query erst ermitteln muss, wieviele AnswerId's vorhanden sind und dann später in t_PollResults wieviele Treffer je AnswerId's vorhanden sind.
Bsp: t_PollAnswers:
AnswerId PollId Answer
8 2 Spanien
9 2 Frankreich
10 2 Italien
11 2 Deutschland
12 3 Ja
13 3 Nein
14 3 VielleichtBsp: t_PollResults:
ResultId AnswerId UserID
1 8 123
2 9 456
3 8 999
4 17 888
5 10 777
6 10 666Jetzt muss ich ermitteln, wieviel AnwerID's für die PollID 2 vorhanden sind und hier jeweils immer die Counts.
was verstehst Du unter Counts. Ich kann nirgendwo eine Spalte diesen Namens finden. Wenn Du irgendwelche Zählergebnisse meinst, dann stelle uns bitte das gewünschte Abfrageergebnis vor - mit den relevanten Spalten und den Werten, wie sie sich aus diesen Beispieldaten ergeben - und der Begründung, warum dies das gewünschte Ergebnis ist. Ich habe jedenfalls nicht verstanden, welches Ergebnis Du gerne hättest.
Geht das direkt in der Query oder sollte ich irgendwie alles auslesen und mit einer While-Schleife dann im JavaCooe alles sortieren/zählen.
Meiner Meinung nach solltest Du möglichst viel dem Datenbankmanagementsystem aufbürden und nicht in Visual Basic, Python, Ruby oder auch Java irgendwelche Datenbankfunktionalität nachbilden.
Freundliche Grüße
Vinzenz
Hi,
er möchte imho ungefähr so etwas (ohne Gewehr und so weiter) wie
SELECT
a.PollId, a.AnswerId, a.Answer, COUNT(*) AS Counts
FROM t_PollResults r
INNER JOIN t_PollAnswers a
ON r.AnswerId = a.AnswerId
/* WHERE a.PollId = 2 */
GROUP BY a.PollId, a.AnswerId, a.Answer
Meine Meinung z.T. Datenbank und nicht-Datenbank
Lass das Datenbanksystem das tun, was es am besten kann:
Ciao, Frank
Hi Frank, sorry hab mein Problem schlecht beschrieben.
SELECT
a.PollId, a.AnswerId, a.Answer, COUNT() AS Counts
FROM t_PollResults r
INNER JOIN t_PollAnswers a
ON r.AnswerId = a.AnswerId
/ WHERE a.PollId = 2 */
GROUP BY a.PollId, a.AnswerId, a.Answer
Ja genau so etwas wollte ich haben. Die obige Query listet mir jedoch als Counts immer die 1 auf. Meine Query sieht in etwa so aus:
~~~sql
SELECT
a.PollId, a.AnswerId, a.Answer, r.PollText,
(SELECT count(*) FROM t_PollAnswers X INNER JOIN t_PollResults Z ON X.AnswerId=Z.AnswerId WHERE a.PollId=X.PollId) -- Das Listet mir alle Stimmen, die für dieses Voting abgegeben wurden
(SELECT count(*) FROM t_PollAnswers Y INNER JOIN t_PollResults W ON Y.AnswerId=W.AnswerId WHERE Y.PollId=2 AND W.MemberId=123) -- Das holt den Count, ob ich bei dieser Auktion jemals eine Stimme abgegeben habe, um dementsprechend das Ergebnis zu verstecken.
(SELECT....) --- Hier eventuell noch einmal ein Sub-Select um für die jeweiligen vorhandenen a.AnswerId's (Vorhandenen Fragen) die gesamten abgegebenen Stimmen zu holen, um das Ergebnis auszugeben.
FROM t_PollAnswers a LEFT JOIN t_Polls p ON a.AnswerId=p=PollId WHERE p.PollId=2;
Sieht jetzt irgendwie Wüst aus, zudem besteht die Query aus 4 Selects.
Meine Meinung z.T. Datenbank und nicht-Datenbank
Lass das Datenbanksystem das tun, was es am besten kann:
- transaktionellen, parallelen Zugriff
- Mengeoperationen (z.b. Zählen, Summerieren und so weiter)
alles andere sollte man ggf aussen drum rum tun.
Gut, hier muss ich dann die Query um einiges schöner und effektiver gestalten. Wobei jetzt das X, Y, Z.. usw. auf die schnelle willkürlich gewählt sind.