CREATE TABLE `players_history` ( `player_id` smallint(5) unsigned NOT NULL default '0', `year` smallint(5) unsigned NOT NULL default '0', `month` tinyint(3) unsigned NOT NULL default '0', `day` tinyint(3) unsigned NOT NULL default '0', `points` int(10) unsigned NOT NULL default '0', PRIMARY KEY (`player_id`,`year`,`month`,`day`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Som I nok kan regne ud er der et link mellem `players`.`id` og `players_history`.`player_id`! Feltet `players_history`.`points` er en værdi der skifter dag for dag. Jeg har via PHP kunne finde ud af dagens højdespringere. Men der er nu ved at være så meget data (400k records) at PHP er for langsom til det.
Nogen der kan komme op med en SQL løsning istedet? Altså en løsning der kun udskriver de data hvor `players_history`.`points` er steget med X ift. dagen før!
Teknologi, AI og forretning er i centrum på Computerworlds Cloud og AI Festival i København d. 18. og 19. september. Se hele programmet for den store konference om strategisk brug af Cloud og AI på: www.cloud-festival.dk
SELECT p.playername,h1.point-h2.point FROM players_history h1,players p, players_history h2 WHERE h1.player_id=p.id AND p.id=h2.player_id AND h1.year=ytoday AND h1.month=mtoday AND h1.day=dtoday AND h2.year=yyesterday AND h2.month=myesterday AND h2.day=dyesterday ORDER BY h1.point-h2.point DESC LIMIT 10
Jeg har rettet nogle s'er så den ser sådan ud: SELECT p.playername,h1.points-h2.points FROM players_history h1,players p, players_history h2 WHERE h1.player_id=p.id AND p.id=h2.player_id AND h1.year=ytoday AND h1.month=mtoday AND h1.day=dtoday AND h2.year=yyesterday AND h2.month=myesterday AND h2.day=dyesterday ORDER BY h1.points-h2.points DESC LIMIT 10
Men jeg får følgende fejl: "#1054 - Unknown column 'ytoday' in 'where clause'" Går ud fra det er en indbygget variable, men ved ikke hvad jeg skal gøre ved det?
Det gav nogle ret underlige tal, men har rettet lidt til i SQL udtrykket da det godt kunne forekomme at points gik ned ad (som resulterede i et meget stort tal - ved sku ikke lige hvorfor) + tilføjet lidt flere data!
SELECT p.playername,h1.points AS idag,h2.points AS igaar,h1.points-h2.points FROM players_history h1,players p, players_history h2 WHERE h1.player_id=p.id AND p.id=h2.player_id AND h1.year=ytoday AND h1.month=mtoday AND h1.day=dtoday AND h2.year=yyesterday AND h2.month=myesterday AND h2.day=dyesterday AND h1.points-h2.points < 100000 ORDER BY h1.points-h2.points DESC LIMIT 10
En spiller vil aldrig (regner jeg da i hvert fald ikke med) stige 100.000 på en enkelt dag, så ovenstående virker. Men er der en bedre (læs mindre krævende) løsning??
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.