hela!

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.

Iemand raad?

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.

GROUP BY
    DATE( datumPlayed )

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
Klaasjan Boven schreef op 02.11.2006 12:37

Altijd groeperen op alles wat je in je select vraagt


Waarom?
Als je alleen op naam wilt groeperen, is GROUP BY naam genoeg hoor.

Misschien even uitleggen waarom je zo stellig roept dat je altijd op alles moet groeperen?

(Volgens mijn Oracle SQL boek, hoeft dat niet altijd)
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.

iemand een idee?

bedankt!
niemand dit probleem ooit hoeven tackelen?
Robert schreef op 02.11.2006 12:41
[quote='Klaasjan Boven schreef op 02.11.2006 12:37']
Altijd groeperen op alles wat je in je select vraagt


Waarom?
Als je alleen op naam wilt groeperen, is GROUP BY naam genoeg hoor.

Misschien even uitleggen waarom je zo stellig roept dat je altijd op alles moet groeperen?

(Volgens mijn Oracle SQL boek, hoeft dat niet altijd)[/quote]

@Robert, een fout van mij je hebt helemaal gelijk sorry

Reageren