Ik probeer een klassement te maken met een aantal gegevens.
Ik heb een tabel :
wedstrijdkalender met als Primary key = wedstrijdID waarbij ik kan sorteren op wedstrijdtypeID=2
wedstrijduitslagen waar ik wedstrijdID gebruik voor de wedstrijd dag , hier staan tevens ook de punten in vermeld en ook ID van de deelnemers
vissers met als Primary key visserID.
Nu is het zo dat er wekelijks mensen bijkomen om een wedstrijd mee te doen, sommige doen maar één wedstrijd en anderen doen ze allemaal.
Nu weet ik niet hoe ik het moet klaar krijgen om de gewenste gegevens te krijgen zodat ik per week alle ID's krijg van de deelnemers ,
Dus als iemand maar eenmalig mee doet mag hij voor de rest van de wedstrijden alleen 0 geven
Als er geen deelnemers zijn op een bepaalde dag, krijg je waarschijnlijk ook geen resultaten? Je zult in PHP dan ook het een en ander moeten fatsoeneren (lege dagen opvullen met "0"). Tenzij de wedstrijdkalender-tabel altijd voor alle dagen gevuld is?
Die id's in het voorbeeld, wat voor id's zijn dat? Wedstrijduitslagen-id's?
Zoals ik het zie kun je het beste een LEFT JOIN maken van wedstrijdkalender op wedstrijduitslagen, en dan in PHP de gegevens per visser ordenen.
SELECT *
FROM wedstrijdkalender wk
LEFT JOIN wedstrijduitslagen wu ON (wu.wedstrijdID = wk.wedstrijdID)
WHERE wk.dag >= [startdag]
AND wk.dag <= [einddag]
AND wk.maandID = [maand]
Als eerste heb ik een tabel 'spelers' gemaakt met alle spelers er in, vanuit deze tabel starten we onze query.
Voor alle spelers, gaan we dan alle wedstrijduitslagen ophalen met een LEFT join (enkel alle uitslagen waarvoor de spelerID gelijk is aan de spelerID van de speler waarvoor we lezen).
Voor alle uitslagen gaan we met een RIGHT join wedstrijdkalenders lezen, als resultaat krijgen we hier alle wedstrijddagen (niet enkel degene die de speler heeft gespeeld)
select distinct wk.wedstrijdID,IFNULL(wu.punten,0) punten,s.spelerID,s.spelerNAAM from
spelers s
LEFT join wedstrijduitslage wu on (wu.spelerID = s.spelerID)
RIGHT join wedstrijdkalender wk on (wu.wedstrijdID = wk.wedstrijdID)
ORDER BY s.spelerID
SELECTDISTINCT wk.wedstrijdID,IFNULL(wu.punten,0) punten,s.spelerID,s.spelerNAAM FROM
hhm , ik denk dat ik het een beetje begrijp maar dan moet ik ook de niet deelnemende vissers in de tabel wedstrijduitslagen hebben staan voor elke wedstrijd, of zie ik het verkeerd.
ik krijg nu alleen nulvelden op de wedstrijden die nog niet geweest zijn wat ook goed is maar mijn probleem is daarmee niet van de baan
Maar dankzij dit ben ik al een stapje verder denk ik.
Ik heb dit ervan gemaakt zodat het met mijn database werkt
SELECT DISTINCT wk.wedstrijdID,IFNULL(wu.plaats,0) plaats,s.visserID,s.voornaam
FROM vissers s
LEFT JOIN wedstrijduitslagen wu ON (wu.visserID = s.visserID)
RIGHT JOIN wedstrijdkalender wk ON (wu.wedstrijdID = wk.wedstrijdID)
ORDER BY s.visserID
Je gaat voor elke wedstrijddag inderdaad 1 record selecteren, ik vrees dat het anders niet gaat lukken, in principe zou je dus. Aantal "wedstrijddagen * aantal vissers" records moeten krijgen.
doordat je ordent op visserID zou't moeten volstaan om door je resultaten te lopen en zo gou je visserID verandert even de TR af te sluiten.
Ik heb het eens geprobeerd met visserID maar volgens mij doe ik het verkeerd want er veranderd niets omdat de visserID altijd gevuld is en true retourneerd. is het misschien mogelijk om eens een voorbeeldje te geven aub want ik zit bijna in de knoop nu
waarschijnlijk zal het simpeler zijn dan wat ik denk maar ja, al doende leert men