webForumDet fria alternativet

Ändra flagga i tabell beroende på summa i annan tabell!

Databaser & SQL

2 svar · 464 visningar · startad av Fraggel

Medlem sedan sep. 2003301 inlägg
Frågan#1

Tabell 1

gID - Key
tID
turn
tableNbr
created
edited
played

Tabell 2
pID - Key
gID - Key
score

Detta är en DB för att hantera lottningar av turneringar
Tabell 1
gID = game ID
tID = tournament ID
turn = omgång i turneringen
tableNbr = nummer på det bord som matchen spelas vid
created och edited = tidsangivelser
played = True or False beroende på om matchen är spelad eller inte

Tabell 2
gID = game ID
pID = player ID
score = resultata för den aktuella spelare i matchen

för varje match som lottas skapas en rad i tabell 1 och två rader i tabell 2, en rad för vajre spelare i den aktuella matchen.

Exempel
tabell 1
gID,tID,turn,tableNbr,created,edited,played
10,1,1,3,2007-01-26 07:55:01,,False
11,1,1,3,2007-01-26 07:55,02,,False

tabell 2
gID,pID,score
10,15,7
10,31,1
11,34,12
11,32,3

match 10 är korrekt rapporterad och match 11 är det inte!

I detta exempel så vill jag ha en verifiering på att poängne fyllt i korrekt och detta vill jag lösa genom att enkelt kolla samtliga matcher i en viss omgång i en viss turnering. Är den korrekt rapporterad så skall summan av fältet score för båda spelarna i den aktuella matchen vara antingen <=8 eller = 12. kan jag enkelt lösa detta med EN UPDATE eller måste jag stega mig fram i forlopar, det rör sig om kanske 50 - 100 rader i varje batch!

Tips någon!

Medlem sedan dec. 19996 721 inlägg
#2

En av många varianter:

UPDATE tabell1 SET correct=1 WHERE gId IN (
SELECT gID FROM tabell2 
GROUP BY gID
HAVING SUM(score)=12 OR SUM(score)<=8
)

..och du kan lägga till lite extra kriterier för att begränsa

Medlem sedan sep. 2003301 inlägg
#3

Det jag missade var HAVING det är ett nytt begrepp för mig!

Har inte testat detta ännu

Återkommer

259 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
118 ms — ändringar (db)