gottlieb: Mehrere counts bei Umfragesystem

Beitrag lesen

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.