04. februar 2007 - 18:16
Der er
24 kommentarer og 1 løsning
group by
Hej jeg har en tabel der indholder id,ip,tid,dato,data hvergang en går ind på min hjemmeside laves der en ny record. ip (varchar 15) = 123.123.123.123 tid (time) = 23:59:59 dato (date) = 2007.02.04 nu vil jeg gerne tælle hvor mange besøgende der kommer til siden hver time på en dag nogen der kan hjælpe mig med en sql string...
Annonceindlæg fra COMM2IG
04. februar 2007 - 18:17
#1
der skal helst komme et svar med 24 records også selvom der en time ikke har været besøg
04. februar 2007 - 18:33
#2
lav en normal GROUP BY og lad din applikation indsætte 0 for de manglende rækker
04. februar 2007 - 18:38
#3
ja tak men det virker ikke helt rigtigt for mig
04. februar 2007 - 18:43
#4
det skal det ! hvis du fortælle rhvilket sproh du bruger, så kan jeg lave et lille eksempel
04. februar 2007 - 19:02
#5
php
04. februar 2007 - 19:20
#6
<?php $con = mssql_connect("localhost", "sa", ""); mssql_select_db("Test", $con); mssql_query("CREATE TABLE dummy (id INTEGER IDENTITY PRIMARY KEY, h INTEGER,txt VARCHAR(255))", $con); mssql_query("INSERT INTO dummy (h,txt) VALUES(8,'bla bla')", $con); mssql_query("INSERT INTO dummy (h,txt) VALUES(9,'bla bla')", $con); mssql_query("INSERT INTO dummy (h,txt) VALUES(9,'bla bla')", $con); mssql_query("INSERT INTO dummy (h,txt) VALUES(10,'bla bla')", $con); mssql_query("INSERT INTO dummy (h,txt) VALUES(12,'bla bla')", $con); mssql_query("INSERT INTO dummy (h,txt) VALUES(13,'bla bla')", $con); mssql_query("INSERT INTO dummy (h,txt) VALUES(13,'bla bla')", $con); mssql_query("INSERT INTO dummy (h,txt) VALUES(14,'bla bla')", $con); mssql_query("INSERT INTO dummy (h,txt) VALUES(14,'bla bla')", $con); mssql_query("INSERT INTO dummy (h,txt) VALUES(14,'bla bla')", $con); mssql_query("INSERT INTO dummy (h,txt) VALUES(15,'bla bla')", $con); mssql_query("INSERT INTO dummy (h,txt) VALUES(15,'bla bla')", $con); mssql_query("INSERT INTO dummy (h,txt) VALUES(16,'bla bla')", $con); $rs = mssql_query("SELECT h,COUNT(*) AS cnt FROM dummy GROUP BY h", $con); $lasth = -1; while ($row = mssql_fetch_array($rs)) { $h = $row["h"]; $cnt = $row["cnt"]; for($i=$lasth+1;$i<$h;$i++) { print "$i 0<BR>\n"; } print "$h $cnt<BR>\n"; $lasth = $h; } for($i=$lasth+1;$i<24;$i++) { print "$i 0<BR>\n"; } mssql_free_result($rs); mssql_query("DROP TABLE dummy", $con); mssql_close($con); ?>
04. februar 2007 - 19:21
#7
du har sikkert ikke h gemt på den måde, men du kan beregen den og pointen er lasth og de to for løkker
04. februar 2007 - 19:46
#8
Jeg er ikke helt med på hvad du har lavet der... Jeg har i dag en tabel med 15000 records, som jeg gerne nu vil til at lave noget analyse på. Eks: ID | IP | Tid | Dato | Data ------------------------------------------------------- 14999 | 123.123.123.123 | 11:00:00 | 2007-01-01 | blabla 15000 | 123.123.123.123 | 11:00:11 | 2007-01-01 | blabla 15001 | 123.123.123.123 | 11:00:21 | 2007-01-01 | blabla 15002 | 123.123.123.124 | 11:00:25 | 2007-01-01 | blabla 15003 | 123.123.123.123 | 12:00:00 | 2007-01-01 | blabla Nu vil jeg gerne ha et resultat der ser såden her ud: 00,0 01,0 ... 11,0 12,0 ... 22,0 23,0
04. februar 2007 - 20:25
#9
SELECT HOUR(tid) AS h, COUNT(*) AS cnt FROM tabel GROUP BY HOUR(tid) og så laver du din while løkke i PHP med last h og de 2 for løkker som i mit eksempel
04. februar 2007 - 21:25
#10
takker så virker det næsten... men sammen IP skal kun tælle en gang pr time noget du let kan løse ?
04. februar 2007 - 21:48
#11
SELECT h,COUNT(*) AS cnt FROM (SELECT DISTINCT ip,HOUR(tid) AS h FROM tabel) x GROUP BY h måske
04. februar 2007 - 21:51
#12
SELECT h,COUNT(*) AS cnt FROM (SELECT DISTINCT ip,HOUR(tid) AS h FROM Visit_Log) x GROUP BY h #1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT DISTINCT ip,HOUR(tid) AS h FROM Visit_Log) x GROUP BY h
04. februar 2007 - 21:55
#13
hvilken version af MySQL ?
04. februar 2007 - 21:57
#14
MySQL 4.0.26
04. februar 2007 - 22:03
#15
tja så duer en subquery jo ikke
04. februar 2007 - 22:04
#16
det er måske først blevet muligt i en nyere version
04. februar 2007 - 22:04
#17
prøv: SELECT HOUR(tid) AS h, COUNT(DISTINCT ip) AS cnt FROM tabel GROUP BY HOUR(tid)
04. februar 2007 - 22:04
#18
ja subquery er 4.1 og nyere
04. februar 2007 - 22:05
#19
ok så var det tæt på... hvad gør man så....
04. februar 2007 - 22:09
#20
har du prøvet 04/02-2007 22:04:06 ?
04. februar 2007 - 22:11
#21
ups så jeg ikke lige...
04. februar 2007 - 22:21
#22
det ser sq ud til at virke vil lige lave lidt test med det... Og så ser det jo ganske enkelt ud...
04. februar 2007 - 22:33
#23
Det virker jo... så mangler vi bare et svar
04. februar 2007 - 22:36
#24
kommer her
04. februar 2007 - 22:50
#25
takker mange gange det var rart at få det til at virke
Computerworld tilbyder specialiserede kurser i database-management