Avatar billede jespera Nybegynder
09. juni 2004 - 13:06 Der er 18 kommentarer og
1 løsning

Tæl antallet af login inden for en dag og for en uge.

Hej alle

Jeg har en log tabel i min DB. Denne indeholder username,ip,dateoflogin.

Dateoflogin er lige nu af typen Date()


Jeg vil så på en af min sider vise hvor mange der er logget ind inden for en dag og inden for en uge. Hvordan gøres dette.

Jeg programmer i jScript.


Håber i kan hjælpe
Avatar billede luzk Nybegynder
09. juni 2004 - 14:23 #1
Rart at se en anden JScript udvikler :D

Benytter du MySQL som DB eller Access? (skal bruge det til at se om du kan klare det direkte i DB'en)

/Luzk
Avatar billede jespera Nybegynder
09. juni 2004 - 14:23 #2
Jeg bruger Access
Avatar billede luzk Nybegynder
09. juni 2004 - 14:42 #3
k - så er jeg lidt på herrens mark desværre, men jeg kunne forestille mig du kunne gøre noget lignende følgende:

for dag:
SELECT COUNT(username) FROM <<tableName>> WHERE dateoflogin BETWEEN NOW()-1 AND NOW()

for uge
SELECT COUNT(username) FROM <<tableName>> WHERE dateoflogin BETWEEN NOW()-7 AND NOW()

Se om det virker på en Access database. Det virker på en MS SQL 2000 og så vidt jeg husker minder syntaksen på de to meget om hinanden - hvis ikke det virker finder vi en anden løsning :D

/Luzk
Avatar billede jespera Nybegynder
09. juni 2004 - 15:11 #4
hvordan får jeg lige skrevet den ud så :-) (Response.Write())
Avatar billede luzk Nybegynder
09. juni 2004 - 15:22 #5
Son normal udskrivning fra recordset :-) jeg lavede en fejl kan jeg se, for egentlig burde det være SELECT COUNT(username) AS totalNum FROM <<tableName>> WHERE dateoflogin BETWEEN NOW()-1 AND NOW() for at have noget at udskrive.

nedenstående burde kunne gøre tricket:
var rs = new ActiveXObject("ADODB.Recordset");
rs = cn.Execute("SELECT COUNT(username) AS totalNum FROM <<tableName>> WHERE dateoflogin BETWEEN NOW()-1 AND NOW()");
Response.Write(Number(rs("totalNum").value))

i princippet kan du nøjes med
Response.Write(rs("totalNum"))
men for at være helt korrekt og alt det der bør du benytte den rette type

/Luzk
Avatar billede jespera Nybegynder
10. juni 2004 - 09:17 #6
Den skriver bare et 0 ud, min kode ser nu sådan ud (har fjernet activex):

rs = Conn.Execute("SELECT COUNT(username) AS totalNum FROM userlog WHERE dateoflogin BETWEEN NOW()-1 AND NOW()");
Response.Write(Number(rs("totalNum").value))
Avatar billede luzk Nybegynder
11. juni 2004 - 09:40 #7
er der nogen der hart logget ind?
prøv følgende:

rs = Conn.Execute("SELECT COUNT(username) AS totalNum, NOW()-1 AS test1, NOW() AS test2 FROM userlog WHERE dateoflogin BETWEEN NOW()-1 AND NOW()");
Response.Write(Number(rs("test1").value) + " " + String(rs("totalNum").value) + " " + Number(rs("test2").value))

Derudover skal du udskrive servertiden

På den måde kan du se hvilke datoer det er den checker på... Det der kan være et issue er hvis der benyttes to forskellige tidsformater. Et på serveren og en på databasen

/Luzk
Avatar billede jespera Nybegynder
11. juni 2004 - 09:58 #8
okay, nu uskriver den noget, men det er nogle sjove tal ??

1086854261000 0
1086940661000
Avatar billede luzk Nybegynder
11. juni 2004 - 11:14 #9
det er ms siden 1/1 1970 så vidt jeg husker. Det kan så bruges til at finde ud af dage etc.

Ved følgende regnestykke:
1086940661000-1086854261000 = 86400000 (ms)
86400000 / 1000 = 86400 (sek)
86400 / 60 = 1440 (min)
1440 / 60 = 24 (timer)

kan du se at der reelt er 24 timer imellem de to tidspunkter den prøver at finde. Næste skridt er så at omregne til hvad de to tidspunkter er. Det kan du gøre på følgende måde:

var dateTest1 = new Date(1086854261000)
Response.Write(dateTest1.toLocaleString() + "<br>");
var dateTest2 = new Date(1086940661000)
Response.Write(dateTest2.toLocaleString() + "<br>");

Her kan du så se at de to tidspunkter er henholdsvis 10. juni 2004 09:57:41 og 11. juni 2004 09:57:41 lokal tid. Er der nogen logins i det tidsrum? Derudover vil jeg stadig råde dig til at finde ud af hvilket tidsformat henholdsvis databasen og serveren benytter...

/Luzk
Avatar billede luzk Nybegynder
11. juni 2004 - 11:15 #10
forresten kan du i Access prøve at søge på BETWEEN og se om den funktion findes - hvis ikke behøver vi ikke gå længere ud af dette spor, men finde en anden vej at gå...
Avatar billede jespera Nybegynder
11. juni 2004 - 11:30 #11
Hey super....

Jeg må lige checke vores webadmin omkring tid på serveren.?? (men jeg bruger Date(), som skriver dette i db Fri Jun 11 11:20:39 2004)
Mht til tid på databasen den kan jeg vel selv finde? eller skal webadmin også svare på den.

Hvad er test1 og test2 ?
Den kode du har givet mig er den for en dag eller uge?

Tusind tak for din hjælp så langt. Det er virkeligt fedt....
Avatar billede luzk Nybegynder
11. juni 2004 - 11:54 #12
Tid på serveren kan du i princippet selv finde ved at skrive
var theDate = new Date();
Response.Write(theDate.toString());

Det kunne tyde på at du skriver dato med engelsk tidsformat. Du kan evt benytte toLocaleString() til at definere at det skal være lokalt tidsformat der skal benyttes.
Tiden i databasen kan du selv se hvis du har en lokal kopi af databasen - hvis ikke findes der så vidt jeg ved en metode til at finde tidszonen, men jeg kan ikke huske den, så du skal nok have fat i din webadm.

test1 og test2 har du ikke længere noget at bruge til, men test1 er "i går" og test2 er "i dag"

KOden du har fået er sådan set for begge. I mit andet indlæg står der to koder - en med NOW()-1, og det er for en dag. Den med NOW()-7 er for en uge :-)

Glad for at det var noget du kunne bruge til noget :-)

/Luzk
Avatar billede jespera Nybegynder
11. juni 2004 - 12:31 #13
arhh ok, jeg kan se der er 7 der har logget ind men hvis jeg ser hvor mange der er logget ind i dag så siger den nul

Til dag bruger jeg denne:

SELECT COUNT(username) AS totalNum FROM userlog WHERE dateoflogin BETWEEN NOW()-1 AND NOW()


Til uge bruger jeg denne:

SELECT COUNT(username) AS totalNum FROM userlog WHERE dateoflogin BETWEEN NOW()-7 AND NOW()



Kan det passe....


Husk lige at læg et svar også :-)
Avatar billede luzk Nybegynder
11. juni 2004 - 13:06 #14
Det er de rigitge scripts du bruger til dag og uge. Den eneste grund jeg kan se til at der ikke skulle være nogen i din count er hvis datoformater er forskellige.

Havde glemt det med svar - så hermed et svar *G*

/Luzk
Avatar billede jespera Nybegynder
11. juni 2004 - 13:31 #15
hmmm for at undgå alt den dato forvirring kan man så ikke dele db op på en anden måde, og således selecte ud fra det ?
Avatar billede luzk Nybegynder
11. juni 2004 - 13:34 #16
tænker du på brug af ID felter eller andet? Dato er i princippet den bedste løsning, for der skal du ikke gemme nogen værdier eller andet

/Luzk
Avatar billede jespera Nybegynder
11. juni 2004 - 13:39 #17
ja opdele db således: dd, mm, åå
Avatar billede luzk Nybegynder
11. juni 2004 - 13:55 #18
det _kan_ du gøre men jeg vi¨l fraråde dig at gøre det for du mister muligheden for simpelt at kunne generere dato objekter udfra din DB. NOget du måske kunne undersøge det var at benytte MySQL istedet, for med den er der gode muligheder for at arbejde med datoer ganske simpelt...

/Luzk
Avatar billede jespera Nybegynder
11. juni 2004 - 13:59 #19
ok jeg takker for din hjælp....kan godt være at jeg opretter et spg igen når jeg får svar fra min webadmin om dato på serveren osv
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

Seneste spørgsmål Seneste aktivitet
I dag 10:21 Ny printer, men hvilken Af mort1 i Printere
I går 19:41 USB på Linux Af Uvanga i Linux
12/0818:26 Hvilken type mus Af mort1 i PC
11/0813:21 ms Forms Af leahcim i Andet software
10/0821:30 Blokeret på Snapchat? Af LineP i Chat & Messaging