/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
trække unikke hits fra statistik
Fra : Kim Emax


Dato : 09-06-03 23:39

Hey

Sidder og pønser på om jeg kan hive unikke hits ud af en statistik tabel,
som ser således ud:

+---------------------+----------------+
| date | ip |
+---------------------+----------------+
| 2003-06-03 01:32:21 | 213.237.12.250 | #1
| 2003-06-03 08:25:21 | 62.113.158.60 | #2
| 2003-06-03 12:41:47 | 213.237.12.250 |#3
| 2003-06-03 12:46:06 | 213.237.12.250 |
| 2003-06-03 13:07:36 | 80.63.209.130 |#4
| 2003-06-03 13:07:59 | 80.63.209.130 |

det jeg så ønsker her er de unikke visits, pr. session så at sige, som talt
sammen efter # - Er det muligt? Det er bare en tanke, formoder det enkelste
er at tælle den op i scriptet for hver gang brugeren kommer ind på siten
igen...

Der er flere felter i tabellen, bla et page, som jeg kunne tælle på, men går
folk direkte ind på en underside (f.eks. ?action=news), så fanges det
ikke...

--
Take Care
Kim Emax - Freelance programmør
http://www.emax.dk - http://www.ayianapa.dk
Køb din vin online på http://www.gmvin.dk,
Danmarks måske mest avancerede VinWebShop



 
 
Kenneth (10-06-2003)
Kommentar
Fra : Kenneth


Dato : 10-06-03 00:06

Du kan forsøge med nedenstående query:

select date,ip,count(ip) from <tabel>
group by date,ip

"Kim Emax" <newsgroup@remove-emax.dk> wrote in message
news:Q08Fa.15050$Jp3.528574@news010.worldonline.dk...
> Hey
>
> Sidder og pønser på om jeg kan hive unikke hits ud af en statistik tabel,
> som ser således ud:
>
> +---------------------+----------------+
> | date | ip |
> +---------------------+----------------+
> | 2003-06-03 01:32:21 | 213.237.12.250 | #1
> | 2003-06-03 08:25:21 | 62.113.158.60 | #2
> | 2003-06-03 12:41:47 | 213.237.12.250 |#3
> | 2003-06-03 12:46:06 | 213.237.12.250 |
> | 2003-06-03 13:07:36 | 80.63.209.130 |#4
> | 2003-06-03 13:07:59 | 80.63.209.130 |
>
> det jeg så ønsker her er de unikke visits, pr. session så at sige, som
talt
> sammen efter # - Er det muligt? Det er bare en tanke, formoder det
enkelste
> er at tælle den op i scriptet for hver gang brugeren kommer ind på siten
> igen...
>
> Der er flere felter i tabellen, bla et page, som jeg kunne tælle på, men
går
> folk direkte ind på en underside (f.eks. ?action=news), så fanges det
> ikke...
>
> --
> Take Care
> Kim Emax - Freelance programmør
> http://www.emax.dk - http://www.ayianapa.dk
> Køb din vin online på http://www.gmvin.dk,
> Danmarks måske mest avancerede VinWebShop
>
>



Johan Holst Nielsen (10-06-2003)
Kommentar
Fra : Johan Holst Nielsen


Dato : 10-06-03 13:55



Kim Emax wrote:
> Hey
>
> Sidder og pønser på om jeg kan hive unikke hits ud af en statistik tabel,
> som ser således ud:
>

Hint: DISTINCT
:)

Og lidt forklaring til den:
http://www.w3schools.com/sql/sql_distinct.asp

mvh
Johan


Kim Emax (10-06-2003)
Kommentar
Fra : Kim Emax


Dato : 10-06-03 18:12

Johan Holst Nielsen wrote:

> Hint: DISTINCT
> :)

Det kan jeg ikke bruge til noget, da en bruger med samme IP sagtens kan
besøge siten to gange i løbet af livet... Som jeg viste af udtrækket:

| 2003-06-03 01:32:21 | 213.237.12.250 | #1
| 2003-06-03 08:25:21 | 62.113.158.60 | #2
| 2003-06-03 12:41:47 | 213.237.12.250 |#3
| 2003-06-03 12:46:06 | 213.237.12.250 |
| 2003-06-03 13:07:36 | 80.63.209.130 |#4

Så tælles 213.237.12.250 to gange

> Og lidt forklaring til den:
> http://www.w3schools.com/sql/sql_distinct.asp

Tak, kender fint distinct, staver det tit forkert

Jeg har valgt at lave et SELECT COUNT(*) FROM tabel WHERE page = 'main';

Det sikrer så ikke at en bruger, der render ind på en side med variabler og
derfor har en anden page, bliver talt med....

--
Take Care
Kim Emax - Freelance programmør
http://www.emax.dk - http://www.ayianapa.dk
Køb din vin online på http://www.gmvin.dk,
Danmarks måske mest avancerede VinWebShop



Jimmy (10-06-2003)
Kommentar
Fra : Jimmy


Dato : 10-06-03 18:50


"Kim Emax" <newsgroup@remove-emax.dk> wrote in message
news:Q08Fa.15050$Jp3.528574@news010.worldonline.dk...
> Hey
>
> Sidder og pønser på om jeg kan hive unikke hits ud af en statistik tabel,
> som ser således ud:
>
> +---------------------+----------------+
> | date | ip |
> +---------------------+----------------+
> | 2003-06-03 01:32:21 | 213.237.12.250 | #1
> | 2003-06-03 08:25:21 | 62.113.158.60 | #2
> | 2003-06-03 12:41:47 | 213.237.12.250 |#3
> | 2003-06-03 12:46:06 | 213.237.12.250 |
> | 2003-06-03 13:07:36 | 80.63.209.130 |#4
> | 2003-06-03 13:07:59 | 80.63.209.130 |
>
> det jeg så ønsker her er de unikke visits, pr. session så at sige, som
talt
> sammen efter #

Jeg forstår simpelthen ikke ovenstående.

Specielt forvirres jeg af, at #1 og #3 er ens og at du anvender begrebet
"session" uden at definere det.

Det lyder som en triviel DISTINCT / GROUP BY opgave, men jeg har som sagt
heller ikke forstået dit problem.

Hvordan skal det forstås?

Mvh
Jimmy



Kim Emax (10-06-2003)
Kommentar
Fra : Kim Emax


Dato : 10-06-03 19:12

Jimmy wrote:

> Jeg forstår simpelthen ikke ovenstående.
>
> Specielt forvirres jeg af, at #1 og #3 er ens og at du anvender
> begrebet "session" uden at definere det.

# bruger jeg som kommentar til det udtræk jeg har lavet... og det skal så
illustrere at det kun er de tækker, der skal tælle til den unikke statistik

Med session mener jeg at når en bruger går ind på en side, så starter han en
session.... Kommer han ind igen senere på dagen, så er det en ny session,
derfor kan distinct ikke bruges, hvis brugeren stadig har samme IP. Hans 2
besøg vil tælles som et... og kommer han igen dagen efter med samme IP, så
er det stadig samme problematik.

--
Take Care
Kim Emax - Freelance programmør
http://www.emax.dk - http://www.ayianapa.dk
Køb din vin online på http://www.gmvin.dk,
Danmarks måske mest avancerede VinWebShop



Jimmy (10-06-2003)
Kommentar
Fra : Jimmy


Dato : 10-06-03 20:43


"Kim Emax" <newsgroup@remove-emax.dk> wrote in message
news:wcpFa.15402$Jp3.573064@news010.worldonline.dk...
> Jimmy wrote:
>
> > Jeg forstår simpelthen ikke ovenstående.
> >
> > Specielt forvirres jeg af, at #1 og #3 er ens og at du anvender
> > begrebet "session" uden at definere det.
>
> # bruger jeg som kommentar til det udtræk jeg har lavet... og det skal så
> illustrere at det kun er de tækker, der skal tælle til den unikke
statistik
>
> Med session mener jeg at når en bruger går ind på en side, så starter han
en
> session....

Fint - Kan du placere dette Session ID i en kolonne?
I asp er det Session.SessionID, i php kender jeg det ikke.


> Kommer han ind igen senere på dagen, så er det en ny session,
> derfor kan distinct ikke bruges, hvis brugeren stadig har samme IP.

Man _kan_ vel løse det vha. SQL, hvis det er et mål i sig selv, men det
bliver ikke kønt.
Hvis du kun har de to givne kolonner (Tid og IP), kan du definere et tidsrum
som to tidspunkter med samme IP trukket fra hinanden skal ligge udenfor for
at afgøre om det er samme "session".

Metode 1 må klart være at foretrække, hvor man programmerer sig ud af det.

Mvh
Jimmy



Kim Emax (11-06-2003)
Kommentar
Fra : Kim Emax


Dato : 11-06-03 00:13

Jimmy wrote:

> Fint - Kan du placere dette Session ID i en kolonne?
> I asp er det Session.SessionID, i php kender jeg det ikke.

Jeps.... det hedder session_id
(http://dk2.php.net/manual/en/function.session-id.php)

> Man _kan_ vel løse det vha. SQL, hvis det er et mål i sig selv, men
> det bliver ikke kønt.

Det var mere et spørgsmål, da jeg blev nysgerrig og ikke benytter mig at
meget avancerede queries med if osv...

> Hvis du kun har de to givne kolonner (Tid og IP), kan du definere et
> tidsrum som to tidspunkter med samme IP trukket fra hinanden skal
> ligge udenfor for at afgøre om det er samme "session".

Det er noget rod

> Metode 1 må klart være at foretrække, hvor man programmerer sig ud af
> det.

Det er også blevet løsningen... Jeg kunne vælge mellem at simpelhent sætte
en var, når man kom ind på siden første gang og så increase en counter i
databasen, det betyder så et hit, for hver gang, alene til den unikke
counter. Derfor kiggede jeg mig om efter om jeg kunne benytte den statistik,
jeg laver for hver sidevisning. Nu er det sådan at "main" kun kaldes, når
man ikke har valgt et link af nogen art... så den fanger det meste... men
ikke, hvis personen kommer ind på siten med et paramter f.eks.
domain.dk?action=test... det må jeg så lige kode mig ud af... :)

--
Take Care
Kim Emax - Freelance programmør
http://www.emax.dk - http://www.ayianapa.dk
Køb din vin online på http://www.gmvin.dk,
Danmarks måske mest avancerede VinWebShop



Dennis Vinther (12-06-2003)
Kommentar
Fra : Dennis Vinther


Dato : 12-06-03 08:04

"Kim Emax" <newsgroup@remove-emax.dk> wrote in
news:ICtFa.15883$Jp3.611587@news010.worldonline.dk:

> Jimmy wrote:
>
>> Metode 1 må klart være at foretrække, hvor man programmerer sig ud af
>> det.
>
> Det er også blevet løsningen... Jeg kunne vælge mellem at simpelhent
> sætte en var, når man kom ind på siden første gang og så increase en
> counter i databasen, det betyder så et hit, for hver gang, alene til
> den unikke counter. Derfor kiggede jeg mig om efter om jeg kunne
> benytte den statistik, jeg laver for hver sidevisning. Nu er det sådan
> at "main" kun kaldes, når man ikke har valgt et link af nogen art...
> så den fanger det meste... men ikke, hvis personen kommer ind på siten
> med et paramter f.eks. domain.dk?action=test... det må jeg så lige
> kode mig ud af... :)

Nu ved jeg godt at det her mere er php end database, men hvis det kan
hjælpe lidt så er her hvordan jeg gør det (her er det for at se unikke
hits for tirsdage):

$result = mysql_query("SELECT remote_addr,timestamp FROM `log` WHERE day
= 'Tue' ORDER BY remote_addr,timestamp DESC",$dblink);
$i_old = 0;
while($i = mysql_fetch_array($result)){
if(($i[0] != $i_old[0])||(abs($i[1]-$i_old[1])>$UnikTimeout)){
$uniktirsdag++;
}
$i_old = $i;
}


Mhv
Dennis

--
Aalborg
Erstat NOSPAM med dk i min e-mail
http://dwt.dk

Kim Emax (12-06-2003)
Kommentar
Fra : Kim Emax


Dato : 12-06-03 09:50

Dennis Vinther wrote:

> Nu ved jeg godt at det her mere er php end database, men hvis det kan
> hjælpe lidt så er her hvordan jeg gør det (her er det for at se unikke
> hits for tirsdage):
>
> $result = mysql_query("SELECT remote_addr,timestamp FROM `log` WHERE
> day = 'Tue' ORDER BY remote_addr,timestamp DESC",$dblink);
> $i_old = 0;
> while($i = mysql_fetch_array($result)){
> if(($i[0] != $i_old[0])||(abs($i[1]-$i_old[1])>$UnikTimeout)){
> $uniktirsdag++;
> }
> $i_old = $i;
> }

Tak for det, jeg ville heller ikke have et problem med at trække en mere
korrekt statistik, hvis jeg hev alle data ud, men det var for at se, om det
kunne lade sig gøre i ren SQL at jeg stillede spørgsmålet her

--
Take Care
Kim Emax - Freelance programmør
http://www.emax.dk - http://www.ayianapa.dk
Køb din vin online på http://www.gmvin.dk,
Danmarks måske mest avancerede VinWebShop



Torben Brandt (11-06-2003)
Kommentar
Fra : Torben Brandt


Dato : 11-06-03 23:30

Kim Emax wrote:
> Sidder og pønser på om jeg kan hive unikke hits ud af en statistik tabel,
> som ser således ud:
>
> +---------------------+----------------+
> | date | ip |
> +---------------------+----------------+
> | 2003-06-03 01:32:21 | 213.237.12.250 | #1
> | 2003-06-03 08:25:21 | 62.113.158.60 | #2
> | 2003-06-03 12:41:47 | 213.237.12.250 |#3
> | 2003-06-03 12:46:06 | 213.237.12.250 |
> | 2003-06-03 13:07:36 | 80.63.209.130 |#4
> | 2003-06-03 13:07:59 | 80.63.209.130 |
>
> det jeg så ønsker her er de unikke visits, pr. session så at sige, som talt
> sammen efter # - Er det muligt? Det er bare en tanke, formoder det enkelste
> er at tælle den op i scriptet for hver gang brugeren kommer ind på siten
> igen...

Jeg foretrækker at tænke på tabellen som en mængde af poster, snarere
end en liste af poster. Her er en mængde kendetegnet ved ikke at have en
ordning, dvs man ved ikke hvilken der kommer før/efter andre.

Ordning med ORDER BY er stort set kun til udskrivning. Jeg kender ikke
nogen eksempel, der kræver at posterne er sorteret. F.eks. kan man lave
en JOIN...ON uden at tabellerne er sorteret.

Derfor giver det ikke umiddelbart mening at gruppere to poster i en
session, bare fordi de kommer efter hinanden.
Hvis nogle kan lave et eksempel på noget SQL, hvor en post kan "aflæse
værdierne i en anden", så er jeg interesseret...
I dette tilfælde ikke det være i stil med:
SELECT * FROM tabel WHERE felt <> [feltet i posten før]

mvh Torben


Jimmy (12-06-2003)
Kommentar
Fra : Jimmy


Dato : 12-06-03 00:01


"Torben Brandt" <name@domain.invalid> wrote in message
news:3EE7AD64.9000003@domain.invalid...

> Her er en mængde kendetegnet ved ikke at have en
> ordning, dvs man ved ikke hvilken der kommer før/efter andre.

Jeg tror du misforstår.
Det har ikke noget med rækkefølgen af posterne at gøre.

IP 213.237.12.250 forekommer tre gange, men skal kun tælles to gange.

Dette skyldes, at tidspunkterne 12:41:47 og 12:46:06 ligger så tæt på
hinanden, at det er rimeligt at antage, at det er samme session, hvor
session her er en sammenhængende periode, en bruger befinder sig på
websitet.

Der kunne være en milliard rækker mellem de to IP'er, men de skulle stadig
kun tælle som een forekomst.

Mvh
Jimmy




Th (12-06-2003)
Kommentar
Fra : Th


Dato : 12-06-03 10:33


>
> Der kunne være en milliard rækker mellem de to IP'er, men de skulle stadig
> kun tælle som een forekomst.
>
>

Det duer stadigvæk ikke. Fra samme IP kan bruger nummer 2 jo sagtens starte
en ny session, 20 sekunder efter bruger nummer 1 gjorde det. Dermed er der 2
unikke sessions fra samme IP på næsten samme tidspunkt.

Der skal bestemt en session ID med ind i spillet. Måske kombineret med et
tidsstempel, da Session_ID ikke er unikt (ikke i ASP ihvertfald svjh)


/Thass

--

Visit http://www.mineonsker.dk



Torben Brandt (12-06-2003)
Kommentar
Fra : Torben Brandt


Dato : 12-06-03 12:58

Jimmy wrote:
> Jeg tror du misforstår.
> Det har ikke noget med rækkefølgen af posterne at gøre.

Måske, men mit spørgsmål var egentlig også et tillægsspørgsmål, der blev
affødt af Kim's spørgsmål.

> Dette skyldes, at tidspunkterne 12:41:47 og 12:46:06 ligger så tæt på
> hinanden, at det er rimeligt at antage, at det er samme session, hvor
> session her er en sammenhængende periode, en bruger befinder sig på
> websitet.

Som jeg læste Kim's spørgsmål, så _ønskede_ han at sortere rækker fra,
der havde samme ip-nummer som række før.
At tråden så finder fra til at _løsningen_ på det konkrete eksempel er,
at gruppere efter tidspunktet er ikke det samme.

Måske læser jeg spørgsmålet anderledes nu, men jeg vil stadig gerne høre
om nogle kan lave noget i stil med
SELECT * FROM tabel WHERE felt <> [feltet i posten før]

/Torben


Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408925
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste