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 tema
Cloud & AI
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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