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!
Niet afhaken svp, ik heb al super veel gehad aan je feedback.

Dat van de laatste editie is ook niet direct prioriteit.

Ik zal het nog een keer proberen: Ik wil alle punten van een speler, bv van Jan, optellen. Bestaande uit alle N1 en N2, en de beste vijf resultaten van N3 en N4. En dat alles uit het afgelopen jaar. Mocht binnen dat jaar een wedstrijd vaker dan 1x hebben plaatsgevonden dan telt alleen die laatste editie mee bij de punten van Jan (indien N1 of N2, of bij de beste resultaten van N3 en N4). De punten van een wedstrijd vervallen dus na 365 dagen, of nadat de wedstrijd weer is verreden.

Maar dat is eigenlijk voor later zorg. Ik zal eerst eens proberen om dat met die Union en N3 en N4 te fixen.
Oke, nog 1 poging dan.

Hoe kan ik aan jouw data zien dat wedstrijden dezelfde wedstrijden zijn, maar andere andere edities?

Ik denk dat ik dat met die datum trouwens wel kan opvangen als ik aan de kalender rij een 'vervaldatum' toevoeg. Dan zou ik kunnen selecteren op $datum between datum AND vervaldatum.
Is begrijp waar je heen wilt. Als er een nieuwe editie is van een wedstrijd zet je bij de vorige editie de vervaldatum. Ik zou zelf kiezen voor een simpel actief J/N vlaggetje.
En dan werken met alle wedstrijden die actief = J hebben.
Ik krijg het nog niet voor elkaar met die 'Union'. Hoe zou ik dat moeten doen? Ik ben even uitgegaan van het begin, en onderstaande subquery is me gelukt, maar hoe zou ik bij wijze van test uitslag_positie 4,5,6 kunnen verenigen dmv een Union?

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

(SELECT * FROM uitslagen
WHERE uitslag_positie IN ('1','2','3')) AS u2

GROUP BY uitslag_naam
ORDER BY SUM(punten) DESC"
Om op je laatste vraag in te gaan: Verderop leg ik het geheel uit.
Ik bouw het even op in stapjes.

Dit is je basis query:

SELECT uitslag_naam, punten FROM uitslagen WHERE uitslag_positie IN ('1','2','3')


Deze query wil je 2 keer uitvoeren en samenvoegen:

SELECT uitslag_naam, punten FROM uitslagen WHERE uitslag_positie IN ('1','2','3')
UNION ALL
SELECT uitslag_naam, punten FROM uitslagen WHERE uitslag_positie IN ('4','5','6')


En het resultaat daarvan wil je groeperen, sorteren en sommeren:

SELECT uitslag_naam, SUM(punten) AS punt FROM 
  (hier de subquery) 
GROUP BY uitslag_naam
ORDER BY SUM(punten) DESC


Dat wordt dan dus:

SELECT t.uitslag_naam, SUM(t.punten) AS punt FROM 
  (SELECT uitslag_naam, punten FROM uitslagen WHERE uitslag_positie IN ('1','2','3')
   UNION ALL
   SELECT uitslag_naam, punten FROM uitslagen WHERE uitslag_positie IN ('4','5','6')
  ) as t
GROUP BY t.uitslag_naam
ORDER BY SUM(t.punten) DESC


Niet getest, dus misschien moet er hier een daar nog een alias bij (AS xxxx).


Ik denk dat ik ook een oplossing heb voor je N3, N4 probleem. Zie hieronder voor het hele verhaal.

[size=xsmall]Toevoeging op 04/12/2015 09:13:28:[/size]

Het liet me niet los, maar het is niet eenvoudig.
Ik zal stap voor stap proberen uit te leggen wat ik doe.

We hebben alleen interesse in uitslagen van "actieve" wedstrijden (of je dit met een datum of een actief vlag aghandelt maakt niet uit, ik gebruik een actief vlag)

Voorbeeld voor de uitslagen van de N1 wedstrijden

SELECT u1.uitslag_spelerid, u1.uitslag_punten FROM uitslagen AS u1
JOIN kalender AS k1 ON k1.categorie = u1.uitslag_categorie AND k1.niveau = u1.uitslag_niveau AND k1.seizoen = u1.uitslag_seizoen  
     AND k1.categorie="N1" AND k1.actief = "J" AND k1.datum BETWEEN '".$datum."' - INTERVAL 1 YEAR AND '".$datum."


Hier blijkt al dat het beter was geweest om niet categorie, niveau en seizoen te repliceren in uitslage, maar een link (kalenderid) van kalender naar de wedstrijd op te nemen. Dan zou het er zo uitzien:

SELECT u1.uitslag_spelerid, u1.uitslag_punten FROM uitslagen AS u1
JOIN kalender AS k1 ON k1.id = u1.kalenderid  
     AND k1.categorie="N1" AND k1.actief = "J" AND k1.datum BETWEEN '".$datum."' - INTERVAL 1 YEAR AND '".$datum."


Ditzelfde kunnen we doen voor de N2 wedstrijden.

Voor de N3 en N4 is het lastiger, want dan hebben we per speler de beste 5 resultaten nodig

We moeten eerst per speler de 5 uitslagen vinden met de hoogste punten:

    set @num := 0, @type := '';
    SELECT u3.uitslag_id FROM (
	  SELECT uitslagen.uitslag_id, uitslagen.uitslag_spelerid, uitslagen.uitslag_punten,
            @num := if(@type = TeamID, @num + 1, 1) as row_number,
            @type := TeamId as dummy
      FROM uitslagen
	  JOIN kalender AS k3 ON k3.id = uitslagen.kalender_id  
           AND k3.categorie="N3" AND k3.actief = "J" AND k3.datum BETWEEN '".$datum."' - INTERVAL 1 YEAR AND '".$datum."
      ORDER BY uitslagen.uitslag_spelerid, uitslagen.uitslag_punten
	) as u3
	WHERE u3.row_number<=5


In de binnen SELECT .. FROM .. JOIN .. ORDER BY voeg je velden toe om de plaats te bepalen van de punten per speler. In de buiten SELECT neem je dan alleen de rijen met row_number kleiner gelijk 5.

Dit resultaat (met de unieke uitslag_id per wedstrijd kunnen we gebruiken om net als bij N1 en N2 de uitslag_spelerid, uitslag_punten op te halen voor de uitslagen uit het resultaat.

set @num := 0, @type := '';
SELECT r3.uitslag_spelerid, r3,uitslag_punten FROM uitslagen AS r3
WHERE r3.uitslag_id in (
    SELECT u3.uitslag_id FROM (
	  SELECT uitslagen.uitslag_id, uitslagen.uitslag_spelerid, uitslagen.uitslag_punten,
            @num := if(@type = TeamID, @num + 1, 1) as row_number,
            @type := TeamId as dummy
      FROM uitslagen
	  JOIN kalender AS k3 ON k3.id = uitslagen.kalender_id  
           AND k3.categorie="N3" AND k3.actief = "J" AND k3.datum BETWEEN '".$datum."' - INTERVAL 1 YEAR AND '".$datum."
      ORDER BY uitslagen.uitslag_spelerid, uitslagen.uitslag_punten
	) as u3
	WHERE u3.row_number<=5
)


Dit zelfde doen we voor N4.
En dan voegen we alles samen.

set @num := 0, @type := '';
-- N1
SELECT u1.uitslag_spelerid, u1.uitslag_punten FROM uitslagen AS u1
JOIN kalender AS k1 ON k1.id = u1.kalenderid  
     AND k1.categorie="N1" AND k1.actief = "J" AND k1.datum BETWEEN '".$datum."' - INTERVAL 1 YEAR AND '".$datum."
-- N2
UNION ALL
SELECT u2.uitslag_spelerid, u2.uitslag_punten FROM uitslagen AS u2
JOIN kalender AS k2 ON k2.id = u2.kalenderid  
     AND k2.categorie="N2" AND k2.actief = "J" AND k2.datum BETWEEN '".$datum."' - INTERVAL 1 YEAR AND '".$datum."
-- N3
UNION ALL
SELECT r3.uitslag_spelerid, r3,uitslag_punten FROM uitslagen AS r3
WHERE r3.uitslag_id in (
    SELECT u3.uitslag_id FROM (
	  SELECT uitslagen.uitslag_id, uitslagen.uitslag_spelerid, uitslagen.uitslag_punten,
            @num := if(@type = TeamID, @num + 1, 1) as row_number,
            @type := TeamId as dummy
      FROM uitslagen
	  JOIN kalender AS k3 ON k3.id = uitslagen.kalender_id  
           AND k3.categorie="N3" AND k3.actief = "J" AND k3.datum BETWEEN '".$datum."' - INTERVAL 1 YEAR AND '".$datum."
      ORDER BY uitslagen.uitslag_spelerid, uitslagen.uitslag_punten
	) as u3
	WHERE u3.row_number<=5
)
-- N3
UNION ALL
SELECT r4.uitslag_spelerid, r4,uitslag_punten FROM uitslagen AS r4
WHERE r4.uitslag_id in (
    SELECT u4.uitslag_id FROM (
	  SELECT uitslagen.uitslag_id, uitslagen.uitslag_spelerid, uitslagen.uitslag_punten,
            @num := if(@type = TeamID, @num + 1, 1) as row_number,
            @type := TeamId as dummy
      FROM uitslagen
	  JOIN kalender AS k4 ON k4.id = uitslagen.kalender_id  
           AND k4.categorie="N4" AND k4.actief = "J" AND k4.datum BETWEEN '".$datum."' - INTERVAL 1 YEAR AND '".$datum."
      ORDER BY uitslagen.uitslag_spelerid, uitslagen.uitslag_punten
	) as u4
	WHERE u4.row_number<=5
)


En over dit alles gooien we dan de SUM, GROUP BY en ORDER BY, Tevens halen we de spelersnaam op als deze niet in uitslagen zit maar in

set @num := 0, @type := '';
SELECT s.naam, SUM(t.punten) AS punt FROM 

	(
	-- N1
	SELECT u1.uitslag_spelerid, u1.uitslag_punten FROM uitslagen AS u1
	JOIN kalender AS k1 ON k1.id = u1.kalenderid  
		 AND k1.categorie="N1" AND k1.actief = "J" AND k1.datum BETWEEN '".$datum."' - INTERVAL 1 YEAR AND '".$datum."
	-- N2
	UNION ALL
	SELECT u2.uitslag_spelerid, u2.uitslag_punten FROM uitslagen AS u2
	JOIN kalender AS k2 ON k2.id = u2.kalenderid  
		 AND k2.categorie="N2" AND k2.actief = "J" AND k2.datum BETWEEN '".$datum."' - INTERVAL 1 YEAR AND '".$datum."
	-- N3
	UNION ALL
	SELECT r3.uitslag_spelerid, r3,uitslag_punten FROM uitslagen AS r3
	WHERE r3.uitslag_id in (
		SELECT u3.uitslag_id FROM (
		  SELECT uitslagen.uitslag_id, uitslagen.uitslag_spelerid, uitslagen.uitslag_punten,
				@num := if(@type = TeamID, @num + 1, 1) as row_number,
				@type := TeamId as dummy
		  FROM uitslagen
		  JOIN kalender AS k3 ON k3.id = uitslagen.kalender_id  
			   AND k3.categorie="N3" AND k3.actief = "J" AND k3.datum BETWEEN '".$datum."' - INTERVAL 1 YEAR AND '".$datum."
		  ORDER BY uitslagen.uitslag_spelerid, uitslagen.uitslag_punten
		) as u3
		WHERE u3.row_number<=5
	)
	-- N4
	UNION ALL
	SELECT r4.uitslag_spelerid, r4,uitslag_punten FROM uitslagen AS r4
	WHERE r4.uitslag_id in (
		SELECT u4.uitslag_id FROM (
		  SELECT uitslagen.uitslag_id, uitslagen.uitslag_spelerid, uitslagen.uitslag_punten,
				@num := if(@type = TeamID, @num + 1, 1) as row_number,
				@type := TeamId as dummy
		  FROM uitslagen
		  JOIN kalender AS k4 ON k4.id = uitslagen.kalender_id  
			   AND k4.categorie="N4" AND k4.actief = "J" AND k4.datum BETWEEN '".$datum."' - INTERVAL 1 YEAR AND '".$datum."
		  ORDER BY uitslagen.uitslag_spelerid, uitslagen.uitslag_punten
		) as u4
		WHERE u4.row_number<=5
	) as t

)
JOIN spelers AS s ON s.id=t.spelerid
GROUP BY s.naam
ORDER BY SUM(t.punten) DESC



Dit overziend denk ik dat het makkelijker en overzichtelijker is om dit niet zo te doen, maar in het script waar je ook de punten bepaald. Dan bouw je het in stukjes op. Dat zou ik zelf tenminste doen.

Ik hoop dat het een beetje klopt. Uit de losse pols ingetikt en dus zitten er misschien hier en daar nog foutjes in. In ieder geval in de namen van tabellen en velden.
Test het uit in stukjes zoals ik het beschrijf en bouw het zo langzaam verder op.
Laat ik je eerst nogmaals bedanken voor de hulp! De Union is me inmiddels gelukt. Ik heb voor het gemak en het overzicht maar even de ballast van de datum eruit gehaald. Prioriteit is hoe ik de beste 5 kan selecteren.

"SELECT t.uitslag_naam, SUM(t.punten) AS punt FROM

  (SELECT uitslag_naam, punten 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 ('N1')
  
   UNION ALL
  
   SELECT uitslag_naam, punten 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 ('N2')
   )   
   as t

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


Alleen die N3 en N4 zijn dus nog niet gelukt. Ik heb even wat namen gewijzigd, want die waren niet allemaal goed. (er stond ook een , achter r3.punten). Het zou dan dit worden, ik heb Join maar even overgenomen en in jouw stijl gezet. Hoef je uitslagen niet 'aan te kondigen' dmv AS uitslagen, omdat je uitslagen. gebruikt?

SELECT r3.uitslag_naam, r3.punten FROM uitslagen AS r3
WHERE r3.uitslag_id in (
    SELECT u3.uitslag_id FROM (
      SELECT uitslagen.uitslag_id, uitslagen.uitslag_naam, uitslagen.punten,
            @num := if(@type = TeamID, @num + 1, 1) as row_number,
            @type := TeamId as dummy
      FROM uitslagen
      JOIN kalender AS k3 ON k3.kalender_id = uitslagen.uitslag_id AND k3.categorie = uitslagen.uitslag_categorie AND k3.seizoen = uitslagen.uitslag_seizoen  
      AND k3.niveau='N3'
      ORDER BY uitslagen.uitslag_naam, uitslagen.punten
    ) as u3
    WHERE u3.row_number<=5
) 


En ik had nog een vraagje over:

set @num := 0, @type := '';


Ik begrijp dat dat vooraan moet staan in de query? Ik heb het als test vooraan gezet in de huidige query met de Union (met N1 en N2), maar dan werkt het al niet meer. Is dat logisch, of zit daar misschien iets in fout?

Ik denk dat het het beste is om eerst alleen de 5 beste resultaten van N3 werkend te krijgen en vervolgens in de Union te verwerken?
Mooi dat de UNION is gelukt.
Ik denk dat de WHERE punten>0 niet hoeft want je toont alleen de SUM(punten). Of moet zijn dat je de namen met 0 punten in totaal niet wilt zien, maar dan moet je tussen GROUP BY en ORDER BY, dit plaatsen HAVING SUM(punten)>0. De HAVING is een soort WHERE maar dan op het groepsresultaat.


VWb 5 beste wedstrijden: Probeer het eens in stapjes (zie opmerking onderaan over gebruik van SET.

1. Lukt het om de uitslagen op volgorde van beste uitslag te krijgen? Ik zie nu dat er na uitslagen.punten nog DESC moet komen

SET @num := 0, @type := '';

      SELECT uitslagen.uitslag_id, uitslagen.uitslag_naam, uitslagen.punten,
            @num := if(@type = uitslag_naam, @num + 1, 1) as row_number,
            @type := uitslag_naam as dummy
      FROM uitslagen
      JOIN kalender AS k3 ON k3.kalender_id = uitslagen.uitslag_id AND k3.categorie = uitslagen.uitslag_categorie 
           AND k3.seizoen = uitslagen.uitslag_seizoen AND k3.niveau='N3'
      ORDER BY uitslagen.uitslag_naam, uitslagen.punten DESC;


2. Lukt het om van de beste 5, alleen de uitslag_id te krijgen

SET @num := 0, @type := '';

   SELECT u3.uitslag_id FROM (
      SELECT uitslagen.uitslag_id, uitslagen.uitslag_naam, uitslagen.punten,
            @num := if(@type = uitslag_naam, @num + 1, 1) as row_number,
            @type := uitslag_naam as dummy
      FROM uitslagen
      JOIN kalender AS k3 ON k3.kalender_id = uitslagen.uitslag_id AND k3.categorie = uitslagen.uitslag_categorie 
           AND k3.seizoen = uitslagen.uitslag_seizoen AND k3.niveau='N3'
      ORDER BY uitslagen.uitslag_naam, uitslagen.punten DESC
    ) as u3
    WHERE u3.row_number<=5;


3. Lukt het van de beste 5 de benodigde gegevens uit uitslagen te halen

SET @num := 0, @type := '';

SELECT r3.uitslag_naam, r3.punten FROM uitslagen AS r3
WHERE r3.uitslag_id in (
   SELECT u3.uitslag_id FROM (
      SELECT uitslagen.uitslag_id, uitslagen.uitslag_naam, uitslagen.punten,
            @num := if(@type = uitslag_naam, @num + 1, 1) as row_number,
            @type := uitslag_naam as dummy
      FROM uitslagen
      JOIN kalender AS k3 ON k3.kalender_id = uitslagen.uitslag_id AND k3.categorie = uitslagen.uitslag_categorie 
           AND k3.seizoen = uitslagen.uitslag_seizoen AND k3.niveau='N3'
      ORDER BY uitslagen.uitslag_naam, uitslagen.punten DESC
    ) as u3
    WHERE u3.row_number<=5
);



Misschien kan het zelfs wat korter, probeer dit eens:

SET @num := 0, @type := '';

SELECT u3.uitslag_naam, u3.punten FROM (
    SELECT uitslagen.uitslag_naam, uitslagen.punten,
           @num := if(@type = uitslag_naam, @num + 1, 1) as row_number,
           @type := uitslag_naam as dummy
    FROM uitslagen
    JOIN kalender AS k3 ON k3.kalender_id = uitslagen.uitslag_id AND k3.categorie = uitslagen.uitslag_categorie 
         AND k3.seizoen = uitslagen.uitslag_seizoen AND k3.niveau='N3'
    ORDER BY uitslagen.uitslag_naam, uitslagen.punten DESC
) as u3
WHERE u3.row_number<=5



Vwb gebruik SET.
Ik heb zelf nog nooit gewerkt met de set. Ik heb gezocht op internet en het lijkt dat je niet 2 statements tegelijk kunt uitvoeren. Dus probeer te splitsen, eerst query met SET @num := 0, @type := ''; en dan query met de SELECT ...

Als iets niet werkt hoor ik graag de foutmelding en de sql zoals je die gebruikte.



[size=xsmall]Toevoeging op 05/12/2015 16:10:59:[/size]

Nog een vraag: in de JOIN gebruik je
JOIN kalender AS k3 ON k3.kalender_id = uitslagen.uitslag_id AND k3.categorie = uitslagen.uitslag_categorie
AND k3.seizoen = uitslagen.uitslag_seizoen AND k3.niveau='N3'

Als je al op k3.kalender_id = uitslagen.uitslag_id kun selecteren, zijn de andere velden (categorie, seizoen en niveau) dan nog wel nodig?
Ik heb van alles geprobeerd, en de code verkleind tot onderstaande, maar krijg constant een error. Altijd direct na de SET.

Error description: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT * FROM uitslagen' at line 3

$sql = 
"set @num := 0, @type := '';

SELECT * FROM uitslagen";


Hoe zou dat dan eruit moeten zien met meerdere queries?
2 keer de sql uitvoeren.
dus:

<?php
$sql1 = "set @num := 0, @type := '';"
$sql2 = "SELECT * FROM uitslagen";
?>

en die allebei uitvoeren met $sql1 en $sql2

NB ik heb in de post van 13:31 TeamID nog vervangen door uitslag_naam. TeamID was van mijn eigen test tabel.

[size=xsmall]Toevoeging op 06/12/2015 13:14:57:[/size]

Vergeet (bijna) alles was ik hierboven heb gezegd over N3 en N4 uitslagen. Het blijkt dat @num niet werkt als er ook een JOIN gebruikt wordt.

Dit werkt wel voor N3 en N4. Ik heb geprobeerd jouw tabellen en data na te bouwen en dan geeft dit het goede resultaat om in de UNIONs te gebruiken:

<?php
		$sql = "SET @num := 0, @type := ''";
		$query = $this->db->prepare($sql);
		$query->execute();
		
		$sql = "
		SELECT uitslag_naam, punten FROM (
			SELECT (SELECT COUNT(cu.uitslag_naam) 
				FROM uitslagen AS cu
				JOIN kalender AS ck ON ck.kalender_id = cu.uitslag_id
					AND ck.categorie = cu.uitslag_categorie
					AND ck.seizoen = cu.uitslag_seizoen
					AND ck.niveau = 'N3'
				WHERE cu.uitslag_naam = r3.uitslag_naam AND cu.punten >= r3.punten) AS rank,
				id,
				uitslag_naam,
				punten
			FROM uitslagen AS r3
			JOIN kalender AS k3 ON k3.kalender_id = r3.uitslag_id
				AND k3.categorie = r3.uitslag_categorie
				AND k3.seizoen = r3.uitslag_seizoen
				AND k3.niveau = 'N3'
			ORDER BY uitslag_naam, rank
		) as u3
		WHERE u3.rank<=5
		ORDER BY uitslag_naam, rank";
		$query = $this->db->prepare($sql);
		$query->execute();
?>


En kijk nog eens goed hoe je uitslagen met kalender JOINed. Volgens mij is uitslag_id voldoende en heb je de andere velden dan niet nodig. maar ik ken dus jouw data niet precies.

Reageren