gottlieb: Mehrere counts bei Umfragesystem

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

  1. 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       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.

    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

    1. 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:

      • transaktionellen, parallelen Zugriff
      • Mengeoperationen (z.b. Zählen, Summerieren und so weiter)
        alles andere sollte man ggf aussen drum rum tun.

      Ciao, Frank

      1. 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.