Avatar billede blod_1 Nybegynder
31. juli 2008 - 18:19 Der er 6 kommentarer og
1 løsning

Tælle en gang med GROUP BY funktionen

Jeg har en database med besøg, som jeg pt aflæser på denne måde

countSQL = "Select dato, COUNT(1) FROM visitors GROUP BY dato"

men problemet er at jeg har flere fra samme id på samme dato, og jeg vil kun have hvert id en gang.

eksempel som det er lige nu
dato - navn - id
2008-08-30 Jens 001
2008-08-30 Jens 001
2008-08-30 Bent 002
2008-08-30 Jens 001
2008-08-30 Bent 002
2008-08-30 Jens 001
2008-08-30 Jens 001

Her vil den jo så sige 7, men der har jo faktisk kun været 2 besøgende, de har bare været flere gange.

Hvordan får jeg sådan så den kun læser hver en gang? Gerne bestemt ud fra deres id, da det aldrig vil være dobbelt.
Avatar billede showsource Seniormester
31. juli 2008 - 18:28 #1
Måske
countSQL = "Select dato, COUNT(1) FROM visitors GROUP BY id, dato"
Avatar billede blod_1 Nybegynder
31. juli 2008 - 23:20 #2
Så viser den mig hvor mange gange hvert id har været der for hver dato
Avatar billede showsource Seniormester
01. august 2008 - 20:09 #3
Jeg er slet ikke med på hvad du vil med din id, men hvad med
GROUP BY navn, dato, id

Så får du godt nok hvert navn vist en gang pr. dag, men som sagt, er ikke helt med! :O)
Avatar billede blod_1 Nybegynder
02. august 2008 - 18:14 #4
Okay, prøver at forklare det igen :)

samme data i databasen som før

dato - navn - id
2008-08-30 Jens 001
2008-08-30 Jens 001
2008-08-30 Bent 002
2008-08-30 Jens 001
2008-08-30 Bent 002
2008-08-30 Jens 001
2008-08-30 Jens 001

der er 7 besøg, her fra to personer (der vil være et par hundrede mere når det bliver brugt rigtigt), besøgene er her kun fra en dato, men der vil være flere datoer.

Jens har været her 5 gange, og Bent har været her 2 gange, og det er jo ialt 7 besøg, hvilket den også vil vise sådan som jeg har det lige nu.

Men det jeg vil have er at den kun viser 2 besøg, efter som der kun har været 2 forskellige her, dog har de været her flere gange, men det er jeg ikke interesseret i at vide, kun hvor mange forskellige der har været her på den dato.

Så 2008-08-30 skal tælles som 2 besøg
Avatar billede showsource Seniormester
03. august 2008 - 10:03 #5
Måske det vil være bedre at oprette spm. i rette sql kategori ?

Men du kan også bruge:
SELECT `dato` FROM `visitors` GROUP BY `dato`, `navn`
så får du ganske vist flere rækker ud end nødvendigt, ( flere dato er samme ), men så kan du i din kode lave et par "if" for at få vist dag og antal hits.

I php og Mysql, kunne det gøres så'n:

$find = "SELECT `dato` FROM `visitors` GROUP BY `dato`, `navn`";
$p = mysql_query($find) or die (mysql_error());


$antal = mysql_num_rows($p);

// ialt bruges til at få vist sidste dato
$ialt = 0;

// hits tælles op for hvert row, og nulstilles hvis datoen skifter
$hits = 0;

while($t = mysql_fetch_object($p)) {
$ialt++;

    // er $dag defineret, og er den ikke den samme datoen fra db
    if(isset($dag) && $t->dato != $dag) {
    echo"<br>".$dag.", Hits = ".$hits;
    // Nulstil hits
    $hits = 0;
    }

// definer $dag
$dag = $t->dato;
// Tæl hits op med 1
$hits++;

    // Hvis sidste række er nået
    if($ialt == $antal) {
    echo"<br>".$dag.", Hits = ".$hits;
    echo"<br>Ialt: ".$antal;
    }
}

Men det virker lidt "overkill" at skulle gøre så'n ?
Avatar billede HenrikSjang Nybegynder
14. september 2008 - 21:21 #6
Måske dette kan bruges (har ikke lige testet det):
countSQL = "Select dato, COUNT(distinct navn) FROM visitors GROUP BY dato"
Avatar billede blod_1 Nybegynder
11. maj 2009 - 00:03 #7
.
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
Kurser inden for grundlæggende programmering

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