webForumDet fria alternativet

Flera count på en gång

3 svar · 212 visningar · startad av kristoffer

kristofferMedlem sedan juni 20001 257 inlägg
#1

Jag har ett omröstningssystem till vilket jag i en databas har lagrat röstningarna enligt:

tabell: polls
fält: id
fält: question

tabell: votealternatives
fält: id
fält: polls_id
fält: alternativetext

tabell: votes
fält: id
fält: polls_id
fält: users_id
fält: votealternatives_id

För att visa resultatet behöver jag veta har många poster i tabellen votes som har röstat på votealternatives_id = 1, 2, 3, osv. Jag vill dock inte göra ett recordset för varje röstningsalternativ,

objRS1 = objConn.Execute("SELECT Count(*) AS Antal_1 FROM votes WHERE polls_id = 1 AND votealternatives_id = 1")
objRS2 = objConn.Execute("SELECT Count(*) AS Antal_2 FROM votes WHERE polls_id = 1 AND votealternatives_id = 2")
objRS3 = objConn.Execute("SELECT Count(*) AS Antal_3 FROM votes WHERE polls_id = 1 AND votealternatives_id = 3")

Kan jag få de olika antalen i samma recordset?

[Redigerat av kristoffer den 02 jan 2002]

developerMedlem sedan aug. 2001458 inlägg
#2

Det du letar efter är GROUP BY, t.ex.

select votealternatives_id, count(*)
from votes
where polls_id = 1
group by votealternatives_id

kristofferMedlem sedan juni 20001 257 inlägg
#3

Tackar. Det fungerade. Kan jag dessutom få reda på det totala antalet i samma SELECT-sats?

LarsGMedlem sedan dec. 200012 464 inlägg
#4

Beror på vilken dbms du har. En del har stöd för något som heter with rollup som innebär att man fär en slutsummering av värdena.


select votealternatives_id, count(*)
from votes
where polls_id = 1
group by votealternatives_id
with rollup

Värdet hamnar i ett eget recordset. Om det inte fungerar så är det nog enklast att summera värdena samtidigt som du presenterar resultatet.

------------------
essentitia preter non sans multiplicandum

132 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)