webForumDet fria alternativet

hjälp med sql-fråga

3 svar · 179 visningar · startad av andreas_lindh

andreas_lindhMedlem sedan jan. 20011 140 inlägg
#1

Jag har tänkt att köra en tipstävling på en hemsida där besökarna kan tippa resultat i en hockeyserie.

Jag har de här tabellerna

s_matcher
id
lagid_a
lagid_b
resultat_a
resultat_b

tmatcher
id
uID
m_ID
res_a
res_b

har användaren tippat helt rätt får han 3 poäng, rätt segrare 1 poäng. Tippar man 2-2 men det blir 3-3 får man 2 poäng.
jag har lyckats räkna alla resultat som är helt rätt och de som ger 2 poäng.
1 poäng får man alltså om man tippat rätt segrare men inte rätt resultat

Hur ska jag göra för att räkna de som ger 1 poäng?

frågan ser ut så här nu

SELECT s_matcher.ID,tMatcher.m_id,tMatcher.uID,
@matcher := count(tMatcher.ID) as matcher,
@fPoints := (Sum(s_matcher.ID = tMatcher.m_ID and (s_matcher.resultat_a = tMatcher.res_a and s_matcher.resultat_b = tMatcher.res_b))*3) as fpoints,
@ties := (Sum(s_matcher.ID = tMatcher.m_ID and ((s_matcher.resultat_a = s_matcher.resultat_b and tMatcher.res_a = tMatcher.res_b) and (tMatcher.res_a <> s_matcher.resultat_a and tMatcher.res_b <> s_matcher.resultat_b)))*2) as ties
FROM s_matcher inner join tMatcher on s_matcher.id = tMatcher.m_ID
group by tMatcher.uID
aasahMedlem sedan mars 20034 471 inlägg
#2

Enklast borde väl vara att helt enkelt ta fram namnen på de personer som tippat rätt segrare och därur ta bort namnen på dem som fått 2 eller 3 poäng. De senare har du ju redan räknat ut. Detta kan göras på två sätt med except (mängdoperation) eller med hjälp av not in.

andreas_lindhMedlem sedan jan. 20011 140 inlägg
#3

har du något exempel på hur man gör det?

andreas_lindhMedlem sedan jan. 20011 140 inlägg
#4

jag löste det med en till sum

@points :=sum(s.ID=t.m_ID And ((s.resultat_a>s.resultat_b And t.res_a > t.res_b) And
 (s.resultat_a<>t.res_a And ((s.resultat_b<>t.res_b) Or (s.resultat_b=t.res_b)))
 or (s.resultat_a < s.resultat_b And t.res_a < t.res_b) 
And (s.resultat_b<>t.res_b And ((s.resultat_a<>t.res_a) Or (s.resultat_a=t.res_a))))) as points
138 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)