webForumDet fria alternativet

Ta fram insläppta mål

4 svar · 358 visningar · startad av Obbelix

ObbelixMedlem sedan okt. 2002257 inlägg
#1

Hej.

Undrar om det går i en å samma sql-sats få fram antal mål en målvakt släppt in under den tid han/hon stod i mål.
Har i "händelse" tabellen olika typer av händelser, mål, utvining, målvaktsbyte osv.
När matchen börjar skapas en post "gk in" och sen id:t på aktuell målvakt. Om sen det blir byte får utgående målvakt "gk out" osv.

Nu vill jag ta fram om det blivit några mål under tiden just den målvakten stod.
Tabellen ser ut ungefär såhär

game_id | period | time_min | time_sec | player_id | action_type
-----------------------------------------------------------------
25        1        00         00         --          Game start
25        1        00         00         77          GK in
25        1        04         03         55          Goal
25        2        10         20         77          GK out
25        2        10         20         88          GK in
25        3        20         00         88          GK out
25        3        20         00         --          Game end

Det jag vill ha ut är att målvakt (player_id) 77 har släppt in ett mål och att målvakt 88 släppt in 0 mål.
Har idag inte att målvakterna "går in" i varje period, men det kanske är nödvändigt?

LarsGMedlem sedan dec. 200012 464 inlägg
#2
select count(*)
from events e
where action_type = 'Goal'
and exists(
select * 
from events
where action = 'GK in'
and ( period < e.period
or (period = e.perid and time_min < e.time_min)
or (period = e.perid and time_min = e.time_min 
  and time_sec < e.time_sec))
and player_id = 77)
and not exists(
select * 
from events
where action = 'GK out'
and ( period < e.period
or (period = e.perid and time_min < e.time_min)
or (period = e.perid and time_min = e.time_min 
  and time_sec < e.time_sec))
and player_id = 77)
ObbelixMedlem sedan okt. 2002257 inlägg
#3

Oj, det var ingen kort sql-sats, men den verkar funka som den ska :)
Jag tackar!

ObbelixMedlem sedan okt. 2002257 inlägg
#4

Drar upp denna tråd igen då det inte fungerar som det ska...

har denna fråga:

SELECT COUNT(*) FROM game_data gd 
WHERE gd.action_type = 'Goal' 
AND gd.game_id=645
AND NOT gd.team_id=97
AND EXISTS(
SELECT * FROM game_data 
WHERE action_type = 'GK in' 
AND (period < gd.period 
OR (period = gd.period AND period_time_min < gd.period_time_min) 
OR (period = gd.period AND period_time_min = gd.period_time_min 
AND period_time_sec < gd.period_time_sec))
AND player_id = 1153) 
AND NOT EXISTS(
SELECT * FROM game_data 
WHERE action_type = 'GK out' 
AND (period < gd.period 
OR (period = gd.period AND period_time_min < gd.period_time_min) 
OR (period = gd.period and period_time_min = gd.period_time_min 
AND period_time_sec < gd.period_time_sec))
AND player_id = 1153)

Har lagt till två argument i frågan jämfört med hur den såg ut från början. Dessa två gör så att den tar rätt match samt att den inte ska räkna mål som det egna laget gjort.

Denna kod borde ha gett 7 som resultat men dessvärre blir det 0.
Har ju inte "gk out" i slutet av matcherna, det kanske är nödvändigt?

ObbelixMedlem sedan okt. 2002257 inlägg
#5

Har nu rotat lite mer i detta och kommit fram till att det är bara de matcher som innehåller målvaktsbyte som räknar fel. ett exempel:

game_id | period | time_min | time_sec | player_id | action_type
-----------------------------------------------------------------
25        1        00         00         --          Game start
25        1        00         00         77          GK in
25        1        04         03         55          Goal
25        1        04         03         55          Goal
25        2        10         20         77          GK out
25        2        10         20         88          GK in
25        2        11         07         55          Goal
25        3        20         00         88          GK out
25        3        20         00         --          Game end

Rätt resultat av ovanstående SQL-fråga borde bli att målvakt 77 har släppt in 2 mål och målvakt 88 släppt in 1 mål.
Resultatet blir dessvärre att målvakt 88 släppt in 3 mål.
Målvakt 77 räknar den rätt på så den får 2 mål.

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