Avatar billede supermand69 Nybegynder
06. oktober 2006 - 21:36 Der er 13 kommentarer og
1 løsning

group by 'pr dag'

jeg skal have talt unikke hits for x antal dage

SELECT COUNT(ip) FROM $DB.log_hit WHERE time>'$time_start' && time<'$time_end'
Avatar billede arne_v Ekspert
06. oktober 2006 - 21:38 #1
er det

SELECT COUNT(DISTINCT ip) ...

du leder efter ?
Avatar billede supermand69 Nybegynder
06. oktober 2006 - 21:42 #2
kommer an på hvad distinct gør?
Avatar billede supermand69 Nybegynder
06. oktober 2006 - 21:43 #3
jeg må kun tælle den samme ip en gang pr døgn
Avatar billede arne_v Ekspert
06. oktober 2006 - 21:44 #4
hvis det er pr dag skal du saa ikke have en GROUP BY ?
Avatar billede supermand69 Nybegynder
06. oktober 2006 - 21:47 #5
jo, det skrev jeg også i overskriften :)

GROUP BY DAY(FROM_UNIXTIME(time))

men så tæller den jo stadig ikke rigtigt.. her tager den kun en række fra hvert døgn
Avatar billede arne_v Ekspert
06. oktober 2006 - 22:55 #6
kan du vise f.eks. 5 rækker og det output du vil have ud af dem ?
Avatar billede supermand69 Nybegynder
06. oktober 2006 - 23:19 #7
log_hit
ip | time

2 | 1159617600 (Lørdag 30. september 2006 kl. 14:00)
2 | 1159650000 (Lørdag 30. september 2006 kl. 23:00)
2 | 1159714800 (Søndag 1. oktober 2006 kl. 17:00)
1 | 1159714800 (Søndag 1. oktober 2006 kl. 17:00)
1 | 1159714810 (Søndag 1. oktober 2006 kl. 17:00)

der må kun tælles den samme ip en gang i døgnet, og ud fra ovenstående skal følgende trækkes ud

2 | Lørdag 30. september 2006
2 | Søndag 1. oktober 2006
1 | Søndag 1. oktober 2006
-----------------------
i alt 3 rækker
=======================
Avatar billede arne_v Ekspert
06. oktober 2006 - 23:35 #8
SELECT DISTINCT ip,FROM_UNIXTIME(time) FROM log_hit

måske
Avatar billede supermand69 Nybegynder
07. oktober 2006 - 09:42 #9
kan det ikke lade sig gøre at lave en slags "samlet" group by over 2 felter? nærmest ligesom en delt primary key på en måde?

men hvad gør DISTINCT() helt præcist?
Avatar billede kjulius Novice
08. oktober 2006 - 01:17 #10
Mit forslag:

SELECT ip, FROM_UNIXTIME(time, '%W, %e. %M %Y') AS Dato, COUNT(*) AS Antal
FROM log_hit
GROUP BY ip, FROM_UNIXTIME(time, '%W, %e. %M %Y')
Avatar billede supermand69 Nybegynder
08. oktober 2006 - 07:43 #11
kjulius > takker, det virker.. lav et svar :)
Avatar billede supermand69 Nybegynder
08. oktober 2006 - 07:58 #12
men hov.. den trækker rigtigt nok de rækker ud jeg skal bruge, men den tæller kun de samme ip's sammen for hver enkelt dag

SELECT ip, time, COUNT(*) AS num FROM $DB.log_hit GROUP BY ip, DAY(FROM_UNIXTIME(time))

ip | time
2 | 1159617600 (Lørdag 30. september 2006 kl. 14:00)
2 | 1159650000 (Lørdag 30. september 2006 kl. 23:00)
2 | 1159714800 (Søndag 1. oktober 2006 kl. 17:00)
1 | 1159714800 (Søndag 1. oktober 2006 kl. 17:00)
1 | 1159714810 (Søndag 1. oktober 2006 kl. 17:00)

udtræk:
ip | time | num
2 | Lørdag 30. september 2006 | 2
2 | Søndag 1. oktober 2006 | 1
1 | Søndag 1. oktober 2006 | 2

num skulle gerne give 3 :)
Avatar billede kjulius Novice
08. oktober 2006 - 23:45 #13
Okay, men så er du nødt til at se bort fra ip feltet i resultatet:

SELECT FROM_UNIXTIME(time, '%W, %e. %M %Y') AS Dato, COUNT(*) AS Antal
FROM log_hit
GROUP BY FROM_UNIXTIME(time, '%W, %e. %M %Y')

Så får du en ren optælling af antal hits pr. dag.
Avatar billede supermand69 Nybegynder
12. oktober 2006 - 16:53 #14
kjulius > det virker ikke helt som jeg vil have det til, men ved din hjælp er jeg kommet frem til følgende:

function hit_counter()
{
    global $DB, $DATE;
   
    $days = 7;
    $time = 60 * 60 * 24 * $days;
    $time_end = $DATE;
    $time_start = $time_end - $time;
   
    $sql = "SELECT COUNT(ip_id) AS num
        FROM $DB.log_hit
        WHERE time>'$time_start' && time<'$time_end'
        GROUP BY ip_id, DATE(FROM_UNIXTIME(time))";
    $get = mysql_query($sql);
    $num = mysql_num_rows($get);
    while($row = mysql_fetch_array($get)) $sum += $row['num'];
   
    $arr['all'] = num($sum / $days);
    $arr['unique'] = num($num / $days);
   
    return $arr;
}

tak for hjælpen :)
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
Computerworld tilbyder specialiserede kurser i database-management

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