Gå til innhold

Ukentlig MySQL oppsummering?


Anbefalte innlegg

Hei igjen folkens!

 

Har en database, som har 5 rader eller felt. De ser slik ut:

 

Michael - Truls - Nicklas - Torp - Jonna - Vilde

 

Dette er brukere som får tildelt poeng gjennom en knapp alle kan klikke på (Kudos knapp på en måte). Hver gang knappen blir klikket på blir en database spørring aktivert og tilføyer en sum til brukeren som fikk knappen klikket på.

 

Det jeg vil er å finne ut hvem som fikk knappen sin klikket mest i løpet av en uke, altså "Ukens bruker med mest Kudos" ;)

Endret av Big-Mama
Lenke til kommentar
Videoannonse
Annonse

Korrekt. Det er veldig vanlige å lagre tidspunkt som timestamps, målt i sekkunder fra 1970. (Unix epoken) Dermed teller man antall sekkunder i en uke for å hente ut alt for denne uken. Merk at i enkelte språk er det vanligere å benytte seg av millisekkunder, dvs. tusen ganger høyere tall enn ved ordinære timestamps, bla. i Javascript.

Lenke til kommentar
Er eksempelet ovenfor for hver og en uke? Antar 60 (sek) 60 (min) 24 (timer) 7 (dager) blir en uke :)

Det er for de siste 7 dagene.

For uke til uke må du bruke noe slikt som:

<?php
if (time() < $w = strtotime('monday')) {
$w = strtotime('last monday');
}
$lw = strtotime('-7 days', $w);
echo 'This week is ' . date('W', $w) . ' and last week was ' . date('W', $lw);

For denne uken bruker du timestamp >= $w .

For forrige uke bruker du timestamp >= $lw og < $w.

Og for uken før det lager du en variabel som er 7 dager før $lw og sammenligner timestamp mellom den datoen og $lw.

Lenke til kommentar
Består ikke en uke av 7 dager?

En uke består av 7 dager, men starter på mandag og slutter på søndag.

Siste 7 dagene eller siste uken har gjerne 2 forskjellige meninger. Forrige uke betyr ikke 8-14 dager før i dag.

En uke fra nå betyr 7 dager fra nå.

Neste uke betyr etter førstkommende søndag.

Denne uken (som eg trodde du var ute etter) betyr fra og med første mandag som var/er til og med første søndag som kommer/er.

Arbeidsuke er da mandag til fredag.

Lenke til kommentar

Bare et lite tips, du bør ikke lagre timestamps som integer, det kan MySQL selv ta seg av; du bruker datatypen date_time. Om du har lyst til å bruke UNIX time for sammenligninger kan du da bare bruker WHERE time > FROM_UNIXTIME( {$date} ). Du kan også bruke WHERE time BETWEEN DATE_SUB( NOW(), INTERVAL 7 DAY ) AND NOW() eller noe slikt. Men nå må jeg fly, så jeg har ikke tid til å slå opp korrekt.

Lenke til kommentar

public function getSomethingForLastWeek() {
$now = getdate();

$lastSecondOnSunday = mktime( 23, 59, 59, $now['mon'], $now['mday'] - date( 'N' ), $now['year'] );

$sql = "SELECT COUNT( * ) AS point, name FROM points WHERE date BETWEEN DATE_SUB( FROM_UNIXTIME( $lastSecondOnSunday ), INTERVAL 7 DAY ) AND FROM_UNIXTIME( $lastSecondOnSunday ) GROUP BY name WITH ROLLUP ORDER BY points DESC, name ASC;";
mysql_whatever( $sql );

$bob = UNCLE;
}

 

Jeg tror dette er omtrent hva du er ute etter. WITH ROLLUP er jeg ikke sikker på om gir ønsket resultat her, for det er avhengig av hvordan tabellen din ser ut, og om du linker en brukertabell med ID mot denne.

Endret av JohndoeMAKT
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...