ik heb even een semi gevordere vraag waar ik nu al een tijdje mee zit.
$query = "
SELECT *, MAX(aantalPunten), UNIX_TIMESTAMP(datumPlayed) AS datumPlayed
FROM $spelerTabel
WHERE DAY(datumPlayed) != DAY(NOW())
GROUP BY DAY(datumPlayed)
ORDER BY datumPlayed DESC";
hierbij wil ik de speler selecteren met de maximale score van vandaag. (bij simulaire scores wil ik de gene die het eerst gespeeld heeft selecteren)
Op dit moment krijg ik $%^$ de laagste! Maar sowieso gebruik ik MAX, GROUP BY en ORDER BY niet correct volgens mij.
ja, lees er de online handleiding over ? je hebt heel veel gevorderder tuts over aql, en je kan altijd nog op de max,group by en order functies dingen opzoeken.
SELECT
naam,
max( aantalPunten ) AS hoogste,
DATE_FORMAT( datumPlayed, '%Y-%m-%d' ) AS speeldag,
DATE_FORMAT( datumPlayed, '%H:%i:%s' ) AS speeltijd
FROM
spelers
GROUP BY
DATE_FORMAT( datumPlayed, '%Y-%m-%d' )
ORDER BY
datumPlayed ASC
@Jan: Waarom een DATE_FORMAT() in de GROUP BY? Ik zou hier de functie DATE gebruiken, die is waarschijnlijk sneller omdat er geen string wordt aangemaakt van de originele datum.
SELECT
naam,
max( aantalPunten ) AS hoogste,
DATE_FORMAT( datumPlayed, '%Y-%m-%d' ) AS speeldag,
DATE_FORMAT( datumPlayed, '%H:%i:%s' ) AS speeltijd
FROM
spelers
GROUP BY
naam,
max( aantalPunten ) AS hoogste,
DATE_FORMAT( datumPlayed, '%Y-%m-%d' ) AS speeldag,
DATE_FORMAT( datumPlayed, '%H:%i:%s' ) AS speeltijd
ORDER BY
datumPlayed ASC
Altijd groeperen op alles wat je in je select vraagt
oei oei, ik dacht al waarom snap ik nietgeheel jullie aanpak... Maar ik heb per ongeluk de verkeerde case ingevoerd..
ik wil elke dag dat er gespeeld is BEHALVE vandaag kijken wie de beste was qua aantalPunten (bij gelijke punten word er gesorteerd op datumPlayed)
SELECT
spelerId,
naam,
day( datumplayed ) ,
max( aantalpunten )
FROM
spelertabel
WHERE
DAY( datumPlayed ) != DAY( NOW( ) )
AND aantalpunten !=0
GROUP BY
DAY( datumPlayed )
ORDER BY
DAY( datumplayed ) DESC
Dit werkte vrij ver goed. Ik krijg een de MAX(aantalPunten) wel door maar naam en spelerId is NIET gelinkt aan die MAX(aantalPunten). Dus ik krijg de verkeerde naam en ID door.
Daarnaast vrees ik voor problemen als ik datums krijg zoals 2 oktober en 2 november aangezien dan DAY() het zelfde is.
iemand suggesties?
sorry voor de verkeerd geformuleerde vraag van eerder en bedankt voor de replies zover!
SELECT
naam,
max( aantalPunten ) AS hoogste,
DATE_FORMAT( datumPlayed, '%Y-%m-%d' ) AS speeldag,
DATE_FORMAT( datumPlayed, '%H:%i:%s' ) AS speeltijd
FROM
spelers
WHERE DATE(datumPlayed) != CURDATE()
GROUP BY
DATE_FORMAT(datumPlayed)
ORDER BY
datumPlayed ASC
Ik heb er wat mee gefutseld maar krijg errors bij het gedeelte
GROUP BY
DATE_FORMAT(datumPlayed)
als ik dit vervang door
GROUP BY
datumPlayed
Is dat weg. Maar ik blijf het zelfde probleem houden.
Ik krijg een de MAX(aantalPunten) wel door maar naam en spelerId is NIET gelinkt aan die MAX(aantalPunten). Dus ik krijg de verkeerde naam en ID door.