webForumDet fria alternativet

Förenkling av omröstningssystem (slå ihop SQL-frågor)

Databaser & SQL

4 svar · 611 visningar · startad av Bäckman

Medlem sedan nov. 2001274 inlägg
Frågan#1

Tjenare!

Håller på med en liten omröstningsfunktion/veckans fråga som jag tänkte ha på min kommande sida. Innan har jag gjort så att jag lagrat all information om en specifik omröstning i endast en tabell. Denna gång tänkte jag göra det lite mer avancerat genom att använda tre tabeller, men jag funderar på om det verkligen är bättre att göra så då det, för mig iaf, blir fler SQL-frågor att köra då när man ska räkna ihop resultat osv.

Polls
Id
Question

Polls_alternatives
Id
PollId (Id till den poll alternativet tillhör)
Alternative

Polls_votes
UserId (Id till den användare som lagt sin röst)
AlternativeId (Id till det alternativ rösten tillhör)

Som jag har löst det nu har jag fått göra en fråga för att ta ut själva frågan från tabellen "Polls", en annan för att ta ut alla alternativ som tillhör den frågan och i den loopen kolla hur många röster det alternativet har. Lite krångligt. :)

Frågan är om det går att göra enklare? Har man en fråga med 6 alternativ så är det 13 SQL-frågor ju, inte så smidigt...

Tack på förhand, om det är någon som orkar ta sig an detta. :OO

Medlem sedan nov. 2001274 inlägg
#2

Kunde nog få ner det till 3 SQL-frågor om jag skickade med pollid:t med rösterna också. Om någon lyckas optimera det ännu mer så lyssnar jag gärna. :)

Medlem sedan dec. 200012 464 inlägg
#3
-- ta fram alla alternativ för en röstning

select question,alternative
from polls inner join polls_alternatives
on polls.id = polls_alternatives.pollId
where polls.id = 4711
-- räkna röster för olika alternativ
select question, alternative, count(AlternativeId) as votes
  from polls as p inner join polls_alternatives as pa
on p.id = pa.pollsId left outer join polls_votes pv
on pa.id = pv.alternativeId
group by question, alternative

Om det är access så får man skriva den sista frågan som

-- räkna röster för olika alternativ
select question, alternative, count(AlternativeId) as votes
  from (polls as p inner join polls_alternatives as pa
on p.id = pa.pollsId) left outer join polls_votes pv
on pa.id = pv.alternativeId
group by question, alternative
Medlem sedan nov. 2001274 inlägg
#4

Tack, funkar kanon tack vare dig!

Medlem sedan jan. 20013 406 inlägg
#5

LarsG skrev:


Om det är access så får man skriva den sista frågan som

[kod]
-- räkna röster för olika alternativ
select question, alternative, count(AlternativeId) as votes
  from (polls as p inner join polls_alternatives as pa
on p.id = pa.pollsId) left outer join polls_votes pv
on pa.id = pv.alternativeId
group by question, alternative

Men hur skriver man för att räkna röster ur just en omröstning t.ex pollID = 1

Redigerat

Var inget!

Where p.id=1
251 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
114 ms — deklarationer (db)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)