WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Avancerad mysql-fråga (https://www.wn.se/forum/showthread.php?t=9386)

festiz 2005-08-16 12:34

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

grazzy 2005-08-16 12:41

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')

eg0master 2005-08-16 13:07

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.


Alla tider är GMT +2. Klockan är nu 04:49.

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