svår SQL-sats, 3 tabeller, olika COUNTS

Tråden skapades och har fått 3 svar. Det senaste inlägget skrevs .
1
  • Medlem
  • Stockholm
  • 2003-11-23 18:12

Tjena!
En liten utmaning sådär på lördagkvällen

Som några kanske vet så har jag ett hobbyprojekt för korpfotbollslaget och vad som gäller nu är att räkna hur många mål en lirare(/lirerska??) gjort för en viss säsong samt hur många matcher han/hon var med på.

* = primary key
# = foreign key
matcher:
match_id * (int 5)   +mer matchinfo
hemma_lag # (int3)
borta_lag # (int3)

matchnarvaro:
match_id *# (int 5)
spelar_id *# (int 5)
spelade  (smallint) //vilken match samt vilken spelare samt en 'boolean'

skytteligan:
match_id *# (int5)
lag_id *# (int5)
mal_no * (smallint)
mal (int5, fylls med ett spelar_id)

lagdeltagan:
sasong_id *# (int3)
spelar_id *# (int5)
lag_id *# (int5)

Jag försökte mig på att skriva så här

$query = mysql_query("	SELECT COUNT(sk.mal) as gjorda_mal, sp.namn_f, sp.namn_e, COUNT(mnv.spelar_id) as antal_matcher
						FROM	spelare sp,
								skytteligan sk,
								matchnarvaro mnv,
								matcher m,
								lagdeltagan ld,
								lag l
						WHERE mnv.spelar_id = sp.spelar_id
							AND mnv.match_id = m.match_id
							AND m.spelad = 1
							
							AND sp.spelar_id = sk.mal
							AND sk.match_id = m.match_id
							AND sk.lag_id = l.lag_id
							AND l.lag_id = 
							AND ld.sasong_id = '$sasong'
							AND m.sasong_id = '$sasong'
							
						GROUP BY namn_e, namn_f
						ORDER BY gjorda_mal DESC
					") or die("Query-Error: " . mysql_error());

men får fram att antalet spelade matcher är lika många som antalet gjorda mål.... Undrar om jag kanske ska göra en snygg join här kanske... (F*n att mysql inte stödjer nästlade select-satser!)

Tips någon? Har kört in i ett hörn och hittar inte ratten (eller reverse, heh)

ps. jag har en teori om att jag inte borde spara lag_id i skytteligan eftersom det ska gå att få fram vilket lag en spelare lirar i genom att läsa av matchen och kolla borta_lag och hemma_lag och se vilket lag spelarn deltog i för den säsongen. Good/bad?

Hej Ivar,

Varför inte göra två olika querys, det är ju två helt olika frågor så man borde nog inte blanda ihop dem.

  • Medlem
  • Stockholm
  • 2003-11-24 10:45

njaao. Det är ju en fråga.
"Hur många mål/matcher har en spelare spelat"

Men jo..har tänkt tanken att göra två querys. Eftersom jag själv inte kommer på lösningen på SQL-satsen så kan jag åtminstone tills vidare köra med två frågor.

Är faktiskt inte helt säker på om problemet faktiskt går att lösa i SQL utan att ta till nästlade satser... känns som att två olika COUNT-värden ställer till det för mycket. COUNT tar väl dessutom inte hänsyn till NULL-värden ens i MySQL? Men om någon annan har en icke-nästlad lösning så har jag inget emot att bli motbevisad!

Hade du kunnat använda nästling hade det varit trivialt, men jag tror att enda lösningen antingen blir att ordna ett av COUNT-värdena med en SQL-sats och det andra genom en iterativ fulhackslösning, eller så att du gör två separata SQL-satser som Fredrik S föreslår. Det sistnämnda borde kunna bli "snyggast", eftersom det blir två hyfsat enkla satser.

1
Bevaka tråden