Avatar billede goldeneyes Nybegynder
12. december 2004 - 14:23 Der er 9 kommentarer

statistik - sidste 5 dage

Jeg sidder lidt og arbejder med et statistiksystem til min side, jeg har en tabel kaldet "statistik" som ser således ud:

id | year | month | week | day | weekday | hour | hit

id: gir sig selv (int)
year: årstallet ex 2004 (int)
month: 1-12 - december = 12 (int)
week: uge nr. (int)
day: dato (int)
weekday: ugedag: 0-6 søndag = 0 onsdag = 3 (int)
hour: time 00-23 (int)
hit: antal besøg (int)

Hver gang enbruger besøger siden, tjekker et lille script om der allerede findes en post med de samme tidskriterier, hvis der gør updateres posten, hvor hit tælles en op. Hvis ikke indsættes en ny post.

Nu kunne jeg godt tænke mig et udtræk der viser antalbesøg de sidste 5 dage.
Hvordan gør jeg det smartest?!?

Jeg kan jo godt komme ud for at der ikke har været nogle besøg en dag, og derfor ingen poster i databasen med denne dato. Disse skal jo gerne vises med et 0.
Avatar billede detox Nybegynder
12. december 2004 - 15:28 #1
Jeg synes du skal bruge et DATETIME felt istedet for: year, month, week, day, weekday og hour. De oplysninger kan du nemlig hente direkte ud af et DATETIME felt med diverse kommandoer som: YEAR(), MONTH(), WEEK(), DAYOFMONTH(), WEEKDAY(), osv.
Det vil osse gøre det nemmere at lave en forespørgsel på fx de sidste 5 dage:

SELECT SUM(hit) AS antal_hits FROM statistik WHERE TO_DAYS(dato) >= TO_DAYS(NOW())-5 GROUP BY TO_DAYS(dato) ORDER BY dato DESC
Avatar billede detox Nybegynder
12. december 2004 - 15:29 #2
DATETIME feltet kan du så bare indsætte med: NOW()
Avatar billede goldeneyes Nybegynder
12. december 2004 - 15:31 #3
Kan jeg med DATETIME senere hente alle de oplysninger ud?!?
Avatar billede goldeneyes Nybegynder
12. december 2004 - 16:06 #4
Det vil da i praksis også betyde at jeg skal haveen post i tabellen for hvert eneste besøg. På den anden måde, kunne jeg begrænse det til 24 pr dag.
Avatar billede goldeneyes Nybegynder
12. december 2004 - 16:37 #5
Nu har jeg ændret det, men hvordan henter jeg så antallet af hits ud for hver dag?

Min tabel har nu kun to felter. et id og et DATETIME, for hvert besøg indsættes en ny post.

Hvordan får jeg nu et udtræk der viser antallet af besøg for hver af de sidte fem dage?

dato: 23
dato2: 25
dato3: 22
dato4: 12
dato5: 34
Avatar billede detox Nybegynder
12. december 2004 - 17:23 #6
I den her stil:

SELECT COUNT(id) AS antal_hits, DATE_FORMAT(dato, '%d-%m-%Y') AS dato FROM statistik WHERE TO_DAYS(dato) >= TO_DAYS(NOW())-5 GROUP BY TO_DAYS(dato) ORDER BY dato DESC

men du kan selvfølgelig godt beholde hit feltet og for så vidt der er indsat noget den samme dag, kan du opdatere feltet. Du kan altid tjekke om der er en række der matcher: TO_DAYS(dato).
Avatar billede goldeneyes Nybegynder
12. december 2004 - 17:40 #7
okay.
Hvordan henter jeg så værdien ud i en variabel?!? Har ikke lige arbejdet med mySQL på denne måde før...
Avatar billede goldeneyes Nybegynder
12. december 2004 - 21:35 #8
Fandt selv ud ad det.
Var ligetil:
while($row = mysql_fetch_array($sql)) {
$row[w];
}

Lægger du et svar, så du kan få dine velfortjente point
Avatar billede detox Nybegynder
20. december 2004 - 21:38 #9
Ja, værsgo'
Avatar billede Ny bruger Nybegynder

Din 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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester