Avatar billede maf95 Nybegynder
03. december 2008 - 19:34 Der er 20 kommentarer og
1 løsning

Gennemsnit af statistik

Hej alle på eksperten.

Jeg ville lige høre et spørgsmål.

Jo, jeg har et statistik modul som udregner hvor mange besøg min side får - også en slags online/offline script.

Kommer en ny IP ind i systemet, bliver der bla tilføjet til database:

`dato` = '$date', // min date, DD-MM-YYYY XX:XX
`tid` = '$tid',  // XX:XX format (klokke tiden)
`dag` = '$dag',  // DD-MM-YYYY
`time` = '$t',  // time ();
`now` = NOW(),  // normal NOW()

er det den samme bruger(ip) som bare opdatere el.l bliver kun visse ting opdateret i databasen (data,tid,dag,time - og IKKE NOW()) + nogle andre ligegyldige ting.

Så der er kun ÉN tabel pr. IP.

- og her kommer jeg så med dagens hjernevrider!

Hvordan kan man udregne UNIKKE BESØG pr. dag i gennemsnit?

Altså hvor mange _nye_ besøgende(ip-adresser) siden får pr. dag?

Evt. udtrække det som besøgte siden inden for de sidste 24 timer?:

SELECT * FROM `min_statistik` WHERE `now` < ADDDATE(NOW(), INTERVAL -24 HOUR)

og så gøre noget andet? - jeg ved ikke helt :D..

Dén her er altså lidt svær - men håber i kan hjælpe mig stadig :).
Avatar billede coderdk Praktikant
03. december 2008 - 19:46 #1
Har du en tabel per IP?!
Avatar billede maf95 Nybegynder
03. december 2008 - 20:09 #2
det er lige præcis det jeg har prøvet at udtrykke mig for, at jeg IKKE har.
- nej det har jeg ikke.
Avatar billede maf95 Nybegynder
03. december 2008 - 20:29 #3
"Så der er kun ÉN tabel pr. _UNIKKE_ IP." :-) sådan skal det forstås.
Avatar billede coderdk Praktikant
03. december 2008 - 20:31 #4
Mnææh, du skriver jo "Så der er kun ÉN tabel pr. IP." ;D

Er ikke sikker på, at det virker. Prøv med:

SELECT COUNT(*) AS antal FROM dintabel GROUP BY ipfelt, dagfelt
Avatar billede coderdk Praktikant
03. december 2008 - 20:31 #5
Jeg forstår det stadig som der er flere tabeller - "Der er kun én tabel til alle IP'er" eller  "Der er kun én tabel til al data"
Avatar billede maf95 Nybegynder
03. december 2008 - 20:43 #6
Hehe - jeg tror du har fat i noget af det rigtige - men er ikke helt sikker.

Forklare lige helt præist:

http://firehost.dk/iptabeller.jpg
Avatar billede maf95 Nybegynder
03. december 2008 - 20:44 #7
hvad mener du med `antal` i mysqlcommandoen?

Skal den ellers se sådan her ud?:

SELECT COUNT(*) AS antal FROM `statistik` GROUP BY `ip`, `dag`

?? :)
Avatar billede maf95 Nybegynder
03. december 2008 - 20:48 #8
ang. mit billede.

der er kun et felt pr. IP i databasen i min tabel `statistik`

id 1 = 0.0.0.0
id 2 = 0.0.0.1
id 3 = 0.0.0.2

OG IKKE:

id 1 = 0.0.0.0
id 2 = 0.0.0.0
id 3 = 0.0.0.0

:)
Avatar billede maf95 Nybegynder
03. december 2008 - 20:50 #9
så jeg vil kunne udregne gennemsnit besøg pr. dag:

Besøg pr. dag i gennemsnit: 21,8 (f.eks).

Hvordan gør jeg så det ? - ud af det information jeg har givet dig :)
Avatar billede coderdk Praktikant
03. december 2008 - 20:58 #10
Ah, prøv:

SELECT COUNT(*) AS antal FROM dintabel GROUP BY dag

"antal" er så navnet på tallet som du hiver ud, f.eks.:

$sql = "SELECT COUNT(*) AS antal, dag FROM dintabel GROUP BY dag";
$qh = mysql_query( $sql ) or die( mysql_error() );
$c = 0;
while ( $row = mysql_fetch_assoc( $qh ) )
{
  echo "<div".($c++%2==0?' style="background-color:#eee"':'').">";
  echo "For $row[dag]: $row[antal] besøg</div>";
}

:)
Avatar billede maf95 Nybegynder
03. december 2008 - 21:00 #11
ehh -
Avatar billede coderdk Praktikant
03. december 2008 - 21:00 #12
eller mere:

$sql = "SELECT COUNT(*) AS antal, dag FROM dintabel GROUP BY dag";
$qh = mysql_query( $sql ) or die( mysql_error() );
$c = 0;
$total = 0;
while ( $row = mysql_fetch_assoc( $qh ) )
{
  $total += $row['antal'];
  echo "<div".($c++%2==0?' style="background-color:#eee"':'').">";
  echo "For $row[dag]: $row[antal] besøg</div>";
}
echo "<p>Totalt $total besøg. " . number_format($total/$c,2,".",",") . " i gennemsnit</p>";
Avatar billede maf95 Nybegynder
03. december 2008 - 21:01 #13
- ups, jeg kan ikke rette.

ehh - jeg har ikke antal i min tabel? :)

$hent = mysql_query("SELECT COUNT(*) AS antal, dag FROM dintabel GROUP BY dag") or die(mysql_error());
$c = 0;
while ($row = mysql_fetch_assoc($hent)) {
  echo "<div".($c++%2==0?' style="background-color:#eee"':'').">";
  echo "For $row[dag]: $row[antal] besøg</div>";
}

(stilte det lige op på min metode :))..

hvad er meningen med denne kode? :D er det der simpelhen gennemsnittet pr. dag? :)
Avatar billede maf95 Nybegynder
03. december 2008 - 21:05 #14
Her er alle de felter jeg har i tabellen :):

id
ip - brugerens ip
dato - dato'en for sidste move
tid - 11:27 f.eks
dag - 03-12-2008 f.eks
time - time ();
type - vedkommer ikke sagen / ligegyldigt :)
url - vedkommer ikke sagen / ligegyldigt :)
status     - vedkommer ikke sagen / ligegyldigt :)
hits - +1 ved hvert move
now - NOW() på første gang, personen blev nedskrevet i loggen / første besøg

hehe, der er en masse information - i know :D..
Avatar billede coderdk Praktikant
03. december 2008 - 21:06 #15
"AS antal" er et alias for COUNT(*)

Du kan også skrive: SELECT dag AS ostehat FROM dintabel
Herefter vil du kunne hive feltet "dag" ud via navnet "ostehat"...

Den sidste kode jeg skriver, udskriver det samlede unikke IP'er ud per dag, og afslutter så med at skrive gennemsnittet af unikke for perioden
Avatar billede maf95 Nybegynder
03. december 2008 - 21:31 #16
aha!

tak for hjælpen! - det virker vidst nu, så kan jeg selv fikse det sidste, med gennemsnit :)..

Men har øhm, lige et hurtigt spørgsmål.

Hvordan kan jeg minuse en dag / 24 timer til denne dato: 03-12-2008 ? så den bliver om til: 02-12-2008 ? :D
Avatar billede coderdk Praktikant
03. december 2008 - 21:39 #17
denne dato eller til dags dato?

echo date("d-m-Y",strtotime("yesterday"));

"yesterday" kan også være "-1 day" ?
Avatar billede maf95 Nybegynder
03. december 2008 - 21:41 #18
aha, jamen jeg arbejder også med strtotime, vidste bare ikke lige der var nogen som hed yesterday :).. tak
Avatar billede coderdk Praktikant
03. december 2008 - 21:46 #19
:D
Avatar billede maf95 Nybegynder
04. december 2008 - 17:36 #20
undskyld, jeg har lige et sidste spørgsmål!

Jeg udregner jo et gennemsnit, men hvordan fjerner man alle de decimaler som kommer bagefter, så der kun er én decimal?

sådan:

10,6

og ikke:

10,67772635

? :) tak, på forhånd.
Avatar billede coderdk Praktikant
04. december 2008 - 21:51 #21
kig på number_format() eller round()

:)
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