sql query uitdaging

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Salami

salami

02/11/2006 02:27:00
Quote Anchor link
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?
 
PHP hulp

PHP hulp

18/11/2024 20:48:59
 
Thijs de Zoete

Thijs de Zoete

02/11/2006 08:34:00
Quote Anchor link
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.

Hier wat links binnen 1 seconde gevonden op google:
http://www.techonthenet.com/sql/max.php
http://www.techonthenet.com/sql/group_by.php
http://www.w3schools.com/sql/sql_orderby.asp
veel succes, ik ga nu maar eens naar school
 
Jan Koehoorn

Jan Koehoorn

02/11/2006 09:01:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
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
 
Frank -

Frank -

02/11/2006 12:32:00
Quote Anchor link
@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.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
GROUP BY
    DATE( datumPlayed )
 
Klaasjan Boven

Klaasjan Boven

02/11/2006 12:37:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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
 
Robert Deiman

Robert Deiman

02/11/2006 12:41:00
Quote Anchor link
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)
 
Salami

salami

04/11/2006 01:48:00
Quote Anchor link
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!
 
Jan Koehoorn

Jan Koehoorn

04/11/2006 03:10:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
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
 
Salami

salami

05/11/2006 16:43:00
Quote Anchor link
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!
 
Salami

salami

07/11/2006 01:33:00
Quote Anchor link
niemand dit probleem ooit hoeven tackelen?
 
Klaasjan Boven

Klaasjan Boven

07/11/2006 08:02:00
Quote Anchor link
Robert schreef op 02.11.2006 12:41:
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)


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

Robert Deiman

07/11/2006 10:11:00
Quote Anchor link
@Klaasjan, Geeft niet, wou het alleen even rechtzetten :) (maakt voor mij niet uit, want ik wist het wel :P)


@TS
Das raar, want volgens mij moet bovengenoemde code gewoon werken. Maargoed, denk niet dat dit werkt, maar proberen kan je altijd he:)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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()
AND
    aantalPunten = hoogste
GROUP BY
    DATE_FORMAT(datumPlayed, '%Y-%m-%d')
ORDER BY
    datumPlayed ASC
Gewijzigd op 01/01/1970 01:00:00 door Robert Deiman
 
Salami

salami

09/11/2006 23:10:00
Quote Anchor link
de mAX() mag je jammergeneog niet zo gebruiken. en de bovenstaande code werkte bijna :p maar net niet

ben nu aan het roberen met een subquery erin. nog geen succes helaas.....
 
Jan Koehoorn

Jan Koehoorn

09/11/2006 23:14:00
Quote Anchor link
@ Robert: in jouw voorbeeld ben je bij GROUP BY het tweede argument voor DATE_FORMAT vergeten.
 
Robert Deiman

Robert Deiman

09/11/2006 23:37:00
Quote Anchor link
Jan Koehoorn schreef op 09.11.2006 23:14:
@ Robert: in jouw voorbeeld ben je bij GROUP BY het tweede argument voor DATE_FORMAT vergeten.


Goed opgemerkt, zal het aanpassen ;)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.