Avatar billede thb Nybegynder
04. april 2003 - 00:40 Der er 11 kommentarer og
1 løsning

SQL

Hey alle

Sidder lige her og er gået lidt fast i noget sql.. :)

Jeg har en tæller som tæller på alle sider, den indsætter en ip adresse og en dato i dben hvergang siden loades..

Det jeg ikke lige kan få til at virke er at jeg skal tælle de unikke hits, hvordan gør jeg det..
En ip adresse kan kun tælle for et unikt hit om dagen.

Thomas
Avatar billede mortrr Praktikant
04. april 2003 - 01:06 #1
sql-server?
Det bliver vist:
select datoen, count(distinct ip) as UnikkeHits from tabellen group by datoen

Husk at lave index på kolonnerne.
Avatar billede thb Nybegynder
04. april 2003 - 07:39 #2
Det er med access, på en windows server.

Thomas

Er tilbage senere idag igen
Avatar billede thb Nybegynder
04. april 2003 - 15:28 #3
Din kode virker ikke rigtig..

Thomas
Avatar billede mortrr Praktikant
04. april 2003 - 15:48 #4
Nej - den kan ikke bruges på access - kun sql-server.

Du bliver nødt til at gøre det af to omgange. Opret et view/forespørgsel med
select distinct datoen,ip from tabellen
og derefter udvælge fra det view
select datoen, count(ip) from viewet group by datoen
Avatar billede thb Nybegynder
04. april 2003 - 16:05 #5
Det forstår jeg ikke lige, kan du komme med noget kode der passer til mit eks ???

Thomas
Avatar billede mortrr Praktikant
04. april 2003 - 16:16 #6
Jamen det passer da også til dit eksempel.

Det kunne være jeg skulle forklare lidt nærmere.

Du skal åbne databasen i Access, og oprette et view som det jeg viste.
Lad os kalde det vwUnikDatoIP

Herefter kan du bruge det til at hente antal hits
sql="select datoen,count(ip) AS UnikkeHits from vwUnikDatoIP group by datoen"
Set rs=Conn.Execute(sql)
while not rs.eof
  Response.Write "<br>" & rs("Datoen") & ":" & rs("UnikkeHits")
  rs.MoveNext
wend
rs.Close
Avatar billede thb Nybegynder
04. april 2003 - 16:41 #7
Jeg har aldrig prøvet at lave sådan et view, hvad gør det ??
Kan man ikke gøre det via SQL i koden ??

Thomas
Avatar billede mortrr Praktikant
04. april 2003 - 16:48 #8
Jo, men du skal kun køre den én gang.

sql="CREATE VIEW vwUnikDatoIP AS select distinct datoen,ip from tabellen"
Conn.Execute(sql)
Avatar billede thb Nybegynder
04. april 2003 - 17:19 #9
okay, nu har jeg prøvet at lave det det view, og det virker, der er bare et problem, og det er at der er også er tid med i datoen så der bliver kun sortere via tiden, dvs. at der er ikke nogle der forsvinder... :)

Thomas
Avatar billede thb Nybegynder
04. april 2003 - 17:26 #10
Nu har jeg fundet en løsning, helt uden view..

SQL = "SELECT DISTINCT DateSerial(Year(dato),Month(dato),Day(dato)) AS unikke, ip FROM counter"
            set s = Conn.Execute(SQL)
           
            i = 0
            s.movefirst
            Do while not s.eof
                i = i+1
            s.movenext
            Loop

Men mange tak for hjælpen...
Her dine fortjente point.. :)

Thomas
Avatar billede mortrr Praktikant
04. april 2003 - 17:26 #11
Ah - jeg overvejede den faktisk, men siden du skrev "dato", så troede jeg på dig :-)
Jeg vil tro du får lov at bruge DateValue funktionen, så:

sql="DROP VIEW vwUnikDatoIP"
Conn.Execute(sql)
sql="CREATE VIEW vwUnikDatoIP AS select distinct DateValue(datoen) AS KunDatoen,ip from tabellen"
Conn.Execute(sql)


sql="select KunDatoen,count(ip) AS UnikkeHits from vwUnikDatoIP group by datoen"
Set rs=Conn.Execute(sql)
while not rs.eof
  Response.Write "<br>" & rs("KunDatoen") & ":" & rs("UnikkeHits")
  rs.MoveNext
wend
rs.Close
Avatar billede mortrr Praktikant
04. april 2003 - 17:27 #12
Du bør nu nok overveje at lade databasen gøre det. Den med at gennemløbe tabellen tager for lang tid hvis du får mange hits.
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
Kurser inden for grundlæggende programmering

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