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'
Annonceindlæg fra Pointsharp
06. oktober 2006 - 21:38
#1
er det SELECT COUNT(DISTINCT ip) ... du leder efter ?
06. oktober 2006 - 21:42
#2
kommer an på hvad distinct gør?
06. oktober 2006 - 21:43
#3
jeg må kun tælle den samme ip en gang pr døgn
06. oktober 2006 - 21:44
#4
hvis det er pr dag skal du saa ikke have en GROUP BY ?
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
06. oktober 2006 - 22:55
#6
kan du vise f.eks. 5 rækker og det output du vil have ud af dem ?
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 =======================
06. oktober 2006 - 23:35
#8
SELECT DISTINCT ip,FROM_UNIXTIME(time) FROM log_hit måske
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?
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')
08. oktober 2006 - 07:43
#11
kjulius > takker, det virker.. lav et svar :)
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 :)
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.
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 :)
Computerworld tilbyder specialiserede kurser i database-management