Toon posts:

[mySQL] Complex query probleem

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

Ik heb een site met flash games, deze zijn aan een mysql DB gekoppeld zodat de highscores van de players kunnen bijgehouden worden. Er zijn 2 tables voor de games

Table1:
code:
1
2
3
4
5
6
CREATE TABLE `mega_games` (
  `game_id` int(5) NOT NULL auto_increment,
  `game_name` varchar(50) NOT NULL default '',
  `description` varchar(50) NOT NULL default '',
  PRIMARY KEY  (`game_id`)
) TYPE=MyISAM AUTO_INCREMENT=16 ;


Table2:
code:
1
2
3
4
5
6
7
8
CREATE TABLE `mega_games_highscores` (
  `game_id` int(4) NOT NULL default '0',
  `player` varchar(254) NOT NULL default '',
  `score` int(50) NOT NULL default '0',
  `date` timestamp(14) NOT NULL,
  `ip` varchar(16) NOT NULL default '',
  KEY `game_id` (`game_id`)
) TYPE=MyISAM;


De tables spreken voor zich wat ze doen veranderstel ik, table1 is een lijst met beschikbare games en hun id, table 2 houdt alle scores bij.

Nu het probleem, Omdat highscores lang stand kunnen houden en het nogal saai wordt op de duur heb ik 2 soorten scores gemaakt. Weekscores die de beste van de week tonen, en de Topscores allertijden.

Met de weekscores geen probleem maar de topscores geven steeds de datum weer waarop de eerste entry voor die user gemaakt werd en niet de datum waarop die score behaald is.

dit is mijn query:
code:
1
2
3
4
5
6
SELECT MAX( h.score )  AS score, h.player, date_format( h.date,  '%Y-%m-%d'  )  AS date
FROM mega_games g, mega_games_highscores h
WHERE h.game_id = g.game_id AND g.game_id =6
GROUP  BY h.player
ORDER  BY score DESC
LIMIT 25



Heeft iemand hier een oplossing voor ?

edit:
versie van de mySQL server is 4.0.20
website is in php

[ Voor 4% gewijzigd door Verwijderd op 25-11-2004 17:48 ]


  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

Het ligt vooral aan GROUP BY lijkt me. Check even P&W FAQ - SQL hierover en eventueel een topic wat ik recent zelf hierover geopend heb: [rml][ MySQL] "GROUP BY en dubbele MAX()"[/rml], volgens mij moet je daar de juiste info wel uit kunnen halen :)

Verwijderd

Topicstarter
X-Lars schreef op donderdag 25 november 2004 @ 17:50:
Het ligt vooral aan GROUP BY lijkt me. Check even P&W FAQ - SQL hierover en eventueel een topic wat ik recent zelf hierover geopend heb: [rml][ MySQL] "GROUP BY en dubbele MAX()"[/rml], volgens mij moet je daar de juiste info wel uit kunnen halen :)
ja het zou mogelijk zijn met subqueries maar die worden pas ondersteund vanaf mySQL v4.1 en de server heef v4.0.20 ik zoek dus een oplossing zonder subqueries.

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

In mijn startpost krijg ik ook het goede resultaat zonder subqueries. :)

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 19-05 21:24

NMe

Quia Ego Sic Dico.

Date_format is toch geen aggregate functie? Dat veld moet dan toch in de GROUP BY gezet worden?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Mij is altijd geleerd dat je best meerdere aggregate functies door elkaar heen kunt gebruiken, dus misschien een MAX om h.date heen zetten? Ik heb dit niet getest, maar volgens mij kan het.

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
-NMe- schreef op donderdag 25 november 2004 @ 20:27:
Date_format is toch geen aggregate functie? Dat veld moet dan toch in de GROUP BY gezet worden?
MySQL houdt zich niet helemaal aan de regels ;)

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 08:53

Creepy

Tactical Espionage Splatterer

-NMe- schreef op donderdag 25 november 2004 @ 20:27:
Date_format is toch geen aggregate functie? Dat veld moet dan toch in de GROUP BY gezet worden?
In elk DMBS behalve MySQl, jups ;)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 19-05 21:24

NMe

Quia Ego Sic Dico.

Creepy schreef op donderdag 25 november 2004 @ 20:31:
[...]

In elk DMBS behalve MySQl, jups ;)
In MySQL moet het ook, maar als je het niet doet vindt ie dat ook prima. Geeft ie alleen onvoorspelbare data terug. :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
dus kan ik nu besluiten dat de omslachtige manier van X-Lars met meerdere query's de enige oplossing voor mijn probleem is aangezien ik geen gebruik kan maken van subquery's ?

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 08:53

Creepy

Tactical Espionage Splatterer

Verwijderd schreef op zondag 28 november 2004 @ 16:26:
dus kan ik nu besluiten dat de omslachtige manier van X-Lars met meerdere query's de enige oplossing voor mijn probleem is aangezien ik geen gebruik kan maken van subquery's ?
Probeer het en je weet het. Je hebt ok al geprobeerde alle niet aggregated field in je group by te zetten zoals dat moet in elk dbms behalve MySQl?

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
die omslachitge manier lukt mij niet ik begrijp wel ongeveer wat er juist gebeurd in deze topic [rml][ MySQL] "GROUP BY en dubbele MAX()"[/rml] maar het lukt mij niet om dit aan te passen naar voor mijn eigen doel.

die aggregate toestanden bij group by zetten heeft geen zin vanals ik er een of meerdere zoals het zou moeten bijzet toont hij gewoon hetzalfde als een SELECT * FROM ...

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

Kijk eens goed naar dit stuk uit de MySQL manual dan. Mijn topic gaat over een "dubbel max/group by"-idee, jij hebt denk ik meer slechts dat deel uit de manual nodig (een enkele).
Pagina: 1