Avatar billede vb_begynder Nybegynder
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...
Avatar billede vb_begynder Nybegynder
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
Avatar billede arne_v Ekspert
04. februar 2007 - 18:33 #2
lav en normal GROUP BY og lad din applikation indsætte 0 for de manglende rækker
Avatar billede vb_begynder Nybegynder
04. februar 2007 - 18:38 #3
ja tak men det virker ikke helt rigtigt for mig
Avatar billede arne_v Ekspert
04. februar 2007 - 18:43 #4
det skal det !

hvis du fortælle rhvilket sproh du bruger, så kan jeg lave et lille eksempel
Avatar billede vb_begynder Nybegynder
04. februar 2007 - 19:02 #5
php
Avatar billede arne_v Ekspert
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);
?>
Avatar billede arne_v Ekspert
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
Avatar billede vb_begynder Nybegynder
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
Avatar billede arne_v Ekspert
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
Avatar billede vb_begynder Nybegynder
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 ?
Avatar billede arne_v Ekspert
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
Avatar billede vb_begynder Nybegynder
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
Avatar billede arne_v Ekspert
04. februar 2007 - 21:55 #13
hvilken version af MySQL ?
Avatar billede vb_begynder Nybegynder
04. februar 2007 - 21:57 #14
MySQL 4.0.26
Avatar billede arne_v Ekspert
04. februar 2007 - 22:03 #15
tja så duer en subquery jo ikke
Avatar billede vb_begynder Nybegynder
04. februar 2007 - 22:04 #16
det er måske først blevet muligt i en nyere version
Avatar billede arne_v Ekspert
04. februar 2007 - 22:04 #17
prøv:

SELECT HOUR(tid) AS h, COUNT(DISTINCT ip) AS cnt FROM tabel GROUP BY HOUR(tid)
Avatar billede arne_v Ekspert
04. februar 2007 - 22:04 #18
ja subquery er 4.1 og nyere
Avatar billede vb_begynder Nybegynder
04. februar 2007 - 22:05 #19
ok så var det tæt på...

hvad gør man så....
Avatar billede arne_v Ekspert
04. februar 2007 - 22:09 #20
har du prøvet 04/02-2007 22:04:06 ?
Avatar billede vb_begynder Nybegynder
04. februar 2007 - 22:11 #21
ups så jeg ikke lige...
Avatar billede vb_begynder Nybegynder
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...
Avatar billede vb_begynder Nybegynder
04. februar 2007 - 22:33 #23
Det virker jo...

så mangler vi bare et svar
Avatar billede arne_v Ekspert
04. februar 2007 - 22:36 #24
kommer her
Avatar billede vb_begynder Nybegynder
04. februar 2007 - 22:50 #25
takker mange gange det var rart at få det til at virke
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