Snåsamannen Skrevet 15. september 2008 Del Skrevet 15. september 2008 (endret) 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 15. september 2008 av Big-Mama Lenke til kommentar
Martin A. Skrevet 15. september 2008 Del Skrevet 15. september 2008 Da må du lagre hvert enkelt klikk, og "notere" tidspunktet. $offset = time() - ( 60 * 60 * 24 * 7 ); $q = mysql_query( "SELECT COUNT(*) AS clicks, member_name FROM kudostabell WHERE timestamp >= {$offset} GROUP BY member_name ORDER BY clicks ASC 'Eller var det DESC?'" ); Lenke til kommentar
Snåsamannen Skrevet 16. september 2008 Forfatter Del Skrevet 16. september 2008 Er eksempelet ovenfor for hver og en uke? Antar 60 (sek) 60 (min) 24 (timer) 7 (dager) blir en uke Lenke til kommentar
Jonas Skrevet 16. september 2008 Del Skrevet 16. september 2008 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
OISNOT Skrevet 16. september 2008 Del Skrevet 16. september 2008 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
Snåsamannen Skrevet 16. september 2008 Forfatter Del Skrevet 16. september 2008 Består ikke en uke av 7 dager? Lenke til kommentar
OISNOT Skrevet 16. september 2008 Del Skrevet 16. september 2008 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
JohndoeMAKT Skrevet 16. september 2008 Del Skrevet 16. september 2008 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
Snåsamannen Skrevet 16. september 2008 Forfatter Del Skrevet 16. september 2008 Kunne du gitt meg et eksempel med UNIX time i spørringen? Hørtes da lettest ut, og det er vel det jeg er ute etter Lenke til kommentar
JohndoeMAKT Skrevet 16. september 2008 Del Skrevet 16. september 2008 (endret) 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 16. september 2008 av JohndoeMAKT Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå