Hej
Her er mit bud på en algoritme. Vha. flg. SQL-pseudokode findes topscorere i denne uge:
select id, count(*) from votes where date >= "mandag" and date <= "søndag" limit 1, 10
På tilsvarende vis findes topscorere i sidste uge:
select id, count(*) from votes where date >= "mandag-sidste-uge" and date <= "søndag-sidste-uge" limit 1, 10
Når vi skal finde topscorerne ganger vi tallene i det første resultat med 7 og dividerer med 2 (fordi det i dag er 2. dag i ugen). Tallene i det andet resultat skal naturligvis ikke ændres. Nu vælger vi så bare de 10 højeste id'er (pas på - der er nok dupletter).
En anden og MEGET simplere algoritme er altid at lade topscorerlisten være bestemt af stemmerne de seneste 7 dage. Denne forespørgsel kan laves meget hurtigt vil jeg mene. Så er der ikke brug for et cron job. Jeg går ud fra at formålet skulle være at toplisten skulle caches for at mindske load på databasen. Jeg ville måske overveje at gemme listen i serverens hukommelse og så slette den for hvert 100. visning af siden. Næste visning medfører så at beregningen foretages igen.
Jeg håber at du kan bruge noget at dette snak. Din programmør forstår det helt sikkert.
Mvh Jan