Hallo,

Ik heb een vraag over Mysql. Ik wil op basis van uitslagen een stand opmaken, maar ik kom er niet uit. De puntentelling is enigszins gecompliceerd, en ik weet niet of ik deze het beste in een table kan stoppen of in de query zelf.

Even een korte uiteg. De stand wordt gebaseerd op de punten behaald in het afgelopen jaar, een beetje zoals in het tennis ook gebeurd. Er zijn twee categoriën A en B, en vier niveau's wedstrijden (N1,N2,N3,N4). Daarnaast is er nog een extra moeilijkheid, namelijk dat van de wedstrijden van niveau N3 en N4 alleen de beste 5 resultaten uit het afgelopen jaar tellen.

De code zou er - voor zover mijn kennis reikt - dus ongeveer zo moeten uitzien denk ik:

SELECT * FROM speler AS s
JOIN uitslagen AS u ON s.id = u.uitslag_naam
JOIN kalender AS k ON k.categorie = u.uitslag_categorie AND k.seizoen = u.uitslag_seizoen AND k.kalender_id = u.uitslag_id

....

GROUP BY uitslag_id
AND datum BETWEEN '".$datum."' - INTERVAL 1 YEAR AND '".$datum."'
ORDER BY datum DESC


'Datum' komt uit kalender, en $datum haal ik op uit de URL met de GET-functie. Omdat elke wedstrijd maar één keer meetelt moet Group BY uitslag_id ervoor zorgen dat er van elke wedstrijd maar één resultaat is, en door middel van de Order by datum de recentste editie. Al moet de stand uiteindelijk worden 'georderd' op basis van degene met de meeste punten. Ik heb al veel gezocht ivm het rekenwerk, maar ik weet niet hoe dat moet, dus dat heb ik maar even open gelaten.

De puntentelling is als volgt:

uitslag_categorie / uitslag_niveau / puntenverdeling
A - N1 / 20 - 18 - 16 - 14 - 12 - 10 - 8 - 6 - 4 - 2
A - N2 / 10 - 9 - 8 - 7 - 6 - 5 - 4 - 3 - 2 - 1
A - N3 / 5 - 4 - 3 - 2 - 1
B - N4 / 3 - 2 - 1

N1 - 1 van 1
N2 - 3 van 3
N3 - 5 van X (alleen vijf beste resultaten tellen mee)
N4 - 5 van X (alleen vijf beste resultaten tellen mee)


Even uit de vrije hand dus zoiets:
IF uitslag_categorie = A AND uitslag_niveau = N1 AND uitslag_positie = 1 --> 20

Ik heb ook een table 'puntentelling' gemaakt bestaande uit de kolommen categorie - niveau - p1 - p2 - p3 etc. maar ik weet niet of dat de manier is waarop dat zou moeten.


Ik hoop dat jullie mij kunnen helpen!
@G, Mooi zo! Mogen we nog zien wat je nu hebt dan, ter lering ende vermaeck van ons en anderen.
<?php

$sql2 = "
SELECT uitslag_naam, SUM(punten) AS punt
FROM 

    (SELECT uitslag_naam, punten FROM uitslagen AS u1
   JOIN kalender AS k1 ON k1.kalender_id = u1.uitslag_id AND k1.categorie = u1.uitslag_categorie AND k1.seizoen = u1.uitslag_seizoen
   WHERE uitslag_categorie = 'A' AND niveau IN ('N1, N2')
   
   UNION ALL
   
	SELECT uitslag_naam, punten FROM
	
		(SELECT uitslag_naam, punten, @num := IF(@id = uitslag_naam, @num +1, 1) rownum, @id := uitslag_naam FROM
		(SELECT uitslag_naam, punten, niveau FROM uitslagen AS u 
		JOIN kalender AS k ON k.kalender_id = u.uitslag_id AND k.categorie = u.uitslag_categorie AND k.seizoen = u.uitslag_seizoen
		WHERE uitslag_categorie = 'A' AND niveau IN ('N3')
		ORDER BY uitslag_naam, punten DESC) t1 	
		
		CROSS JOIN (SELECT @num:= 0, @id := 0) v1) t2
    
	WHERE rownum <= 5
	
	UNION ALL
	
	SELECT uitslag_naam, punten FROM
	
		(SELECT uitslag_naam, punten, @num := IF(@id = uitslag_naam, @num +1, 1) rownum, @id := uitslag_naam FROM
		(SELECT uitslag_naam, punten, niveau FROM uitslagen AS u 
		JOIN kalender AS k ON k.kalender_id = u.uitslag_id AND k.categorie = u.uitslag_categorie AND k.seizoen = u.uitslag_seizoen
		WHERE uitslag_categorie = 'B' AND niveau IN ('N4')
		ORDER BY uitslag_naam, punten DESC) t1 	
		
		CROSS JOIN (SELECT @num:= 0, @id := 0) v1) t2
    
	WHERE rownum <= 5

	) t3


WHERE punten > 0
GROUP BY uitslag_naam
ORDER BY SUM(punten) DESC";

?>

Reageren