Sick-Boy
Legacy Member
Voor de website van mijn zaalvoetbalploeg wou ik graag wat statistieken genereren. Hiervoor wil ik drie tabellen combineren via JOINs. De drie tabellen zijn de volgende:
MembersTabel: MemberID, MemberNaam, ...
MemberTypeTabel: MemberID, TypeID.
WedstrijdSpelerTabel: SpelerID, WedstrijdID.
Elke member kan verschillende functies of types hebben (Spelers, voorzitter, secretaris, ...). Elke rij in SpelerWedstrijdTabel is een unieke combinatie van speler en wedstrijd.
De statistiek die ik wil genereren is het aantal wedstrijden die een speler van de C-ploeg (TypeID = 7) gespeeld heeft. Dus gebruik ik de volgende query:
Maar ik krijg een onverwacht resultaat. Er zijn 12 spelers in de C-ploeg en 2 daarvan hebben 0 wedstrijden gespeeld (geen enkele vermelding in WedstrijdSpelerTabel). Voor de bovenstaande query krijg ik 11 rijen terug, met voor 1 speler een waarde 0 bij gespeeld. Ik veronderstel dat die Group By statement de oorzaak is van die ene speler en geen tweede. Maar toch had ik verwacht dat beide spelers in de lijst zouden staan, omwille van de LEFT JOIN.
Iemand die mij de juiste query kan vertellen?
On a sidenote: ik krijg hetzelfde resultaat met een subquery.
MembersTabel: MemberID, MemberNaam, ...
MemberTypeTabel: MemberID, TypeID.
WedstrijdSpelerTabel: SpelerID, WedstrijdID.
Elke member kan verschillende functies of types hebben (Spelers, voorzitter, secretaris, ...). Elke rij in SpelerWedstrijdTabel is een unieke combinatie van speler en wedstrijd.
De statistiek die ik wil genereren is het aantal wedstrijden die een speler van de C-ploeg (TypeID = 7) gespeeld heeft. Dus gebruik ik de volgende query:
PHP:
SELECT M.MemberVoornaam, COUNT(WST.SpelerID) AS Gespeeld
FROM MembersTabel AS M
INNER JOIN MembersTypeTabel AS MT ON (M.MemberID = MT.MemberID)
LEFT JOIN WedstrijdSpelerTabel AS WST ON (M.MemberID = WST.SpelerID)
WHERE MT.TypeID = 7 GROUP BY WST.SpelerID
Maar ik krijg een onverwacht resultaat. Er zijn 12 spelers in de C-ploeg en 2 daarvan hebben 0 wedstrijden gespeeld (geen enkele vermelding in WedstrijdSpelerTabel). Voor de bovenstaande query krijg ik 11 rijen terug, met voor 1 speler een waarde 0 bij gespeeld. Ik veronderstel dat die Group By statement de oorzaak is van die ene speler en geen tweede. Maar toch had ik verwacht dat beide spelers in de lijst zouden staan, omwille van de LEFT JOIN.
Iemand die mij de juiste query kan vertellen?
On a sidenote: ik krijg hetzelfde resultaat met een subquery.
PHP:
SELECT M.MemberVoornaam, COUNT(WST.SpelerID)
FROM MembersTabel AS M
INNER JOIN (
SELECT MemberID
FROM MembersTypeTabel
WHERE TypeID = 7
) S ON (M.MemberID = S.MemberID)
LEFT JOIN WedstrijdSpelerTabel AS WST
ON (M.MemberID = WST.SpelerID)
GROUP BY WST.SpelerID
