Kom ihåg mig?

Avancerad mysql-fråga

Ämnesverktyg Visningsalternativ
Oläst 2005-08-16, 12:34 #1
festizs avatar
festiz festiz är inte uppkopplad
Flitig postare
 
Reg.datum: Jun 2004
Inlägg: 302
festiz festiz är inte uppkopplad
Flitig postare
festizs avatar
 
Reg.datum: Jun 2004
Inlägg: 302
Jag håller på och skapar en statistisk analys på min hemsida och sparar IP, referer, sessionid, UA, QS med mera.. Jag vill plocka ut antalet unika besökare och tänkte då att man enklast gör detta genom antalet unika sessionid med unika IP-nummer.. Varenda sidbesök registreras i databasen, så IPnumret finns oftast med multipla gånger och så även sessid.. så jag vill kunna ta reda på hur många unika besökare jag har och hur många sidor de besöker i snitt.. det vore ganska enkelt, men jag vet inte hur jag ska göra queryn med unika par av IP och sessid.
Kod:
SELECT IP, sessid FROM statistik WHERE....
Jag har sökt igenom mysql dokumentationen, men eftersom jag inte riktigt vet vad jag letar efter har jag sökt på "unique" och inte hittat något som verkar kunna hjälpa mig. Det viktiga är att jag vill ha unika par, inte unika träffar av IP eller sessid, utan unika par.. HJÄLP!

EDIT: Anledningen till att jag inte matchar bara unika sessid är att de kan ju slumpas till samma. Om du har något bättre förslag på hur man letar fram unika besökare så finns fälten tidpunkt(timestamp), referer(refererande URL), host(webbsidans host),UA(UserAgent), IP(IP-nummer), PS(PHPSELF), QS(QueryString) ,charset(förvald charset i klientens webbläsare) och sessid
festiz är inte uppkopplad   Svara med citatSvara med citat
Oläst 2005-08-16, 12:41 #2
grazzy grazzy är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Mar 2004
Inlägg: 3 471
grazzy grazzy är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Mar 2004
Inlägg: 3 471
GROUP BY ip är nog vad du söker. Då grupperar databasen upp varje unikt ip i en "grupp". Denna grupp kan du sedan utföra "aggregate"-funktioner på precis som vanligt, tex count, avg, max etc.

Tex:
SELECT ip, COUNT(id) FROM bigbrother GROUP BY ip;

Producerar ett resultat med varje ip, samt hur många gånger detta IP har besökt din sida. Om du bara vill ha återkommande besökare kanske följande query är intressant:
SELECT ip, COUNT(id) FROM bigbrother GROUP BY ip HAVING COUNT(id) > 1;


Edit: för att få "riktigt unika besökare" så får du förstås konkatenera ett par fält, då tex ip + useragent + dag kanske tex: CONCAT(ip, useragent, DATE_FORMAT(datumfalt,'%nånting')
grazzy är inte uppkopplad   Svara med citatSvara med citat
Oläst 2005-08-16, 13:07 #3
eg0master eg0master är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Oct 2004
Inlägg: 898
eg0master eg0master är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Oct 2004
Inlägg: 898
Du skulle sökt efter DISTINCT och inte UNIQUE.

Dock är ju en variant av grazzys förslag där du använder count(xxx) bättre eftersom du då låter DBn räkna istf att göra det i klientkoden.

Ang. sessionID så finns det en sätt att skapa ett ID som är i praktiken unikt.
Gör en sträng av UserAgent, IP, tid (gärna inkl mikrosekunder) och ett slumpvärde. MD5 hasha strängen och du har ett sesisonsID som är tillräckligt bra i praktiken utan att du skall vara orolig för att slumpen skall slå ihop två sessioner.
eg0master är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 
Ämnesverktyg
Visningsalternativ

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 21:35.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017