Avatar billede gatez Nybegynder
05. november 2004 - 22:29 Der er 11 kommentarer og
1 løsning

Hjælp til ny SQL string

Hejsa,

Jeg har omkring 1500 medlemmer på min side... Jeg bruger dette script det at tjekke om mange af dem som er online:

----------------------------------
Session.LCID = 1030
datoidag = (Date())
datoogtid = datoidag & " " & time

strSQL = "SELECT * FROM bruger;"
set rs = Conn.execute(strSQL)
if rs.EOF then
else
Do Until rs.EOF
strsidstaktivtetbruger = RS("sidstaktivtet")
strsidstaktivtetid = RS("id")
If DateDiff("s", strsidstaktivtetbruger, datoogtid) < 14 Then

strsidstaktivtetantal = strsidstaktivtetantal + 1

end if
RS.MoveNext
Loop
end if
----------------------------------

Kan man ikke gøre det på en smarter måde ? Sådan at den ikke behøver at køre alle brugerne igennem... ?  Det tar nemlig 4-5 sec. længere tid at loade siden med denne kode...

Jeg vil derfor høre om hvordan jeg hiver det samme resutat ud med en SQL string ?
Avatar billede hmortensen Nybegynder
05. november 2004 - 22:36 #1
Hvis du bruger mysql burde du kunne gøre sådan her:
SELECT COUNT(*) FROM bruger WHERE (UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(sidstaktivtet)) < 14

Så vil den returnere antal brugere hvor der er mindre end 14 sec forskel på nu og sidste aktivitet
Avatar billede eagleeye Praktikant
05. november 2004 - 22:39 #2
Eller sådan her med access

sql="select count(*) as antal from bruger where dateDiff('s',sidstaktivtet,now())<14"
Avatar billede gatez Nybegynder
05. november 2004 - 22:45 #3
Okay fedt... Jeg bruger MySQL...

Sådan her:
strSQL = "SELECT COUNT(*) FROM bruger WHERE (UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(sidstaktivtet)) < 14"
set rs = Conn.execute(strSQL)
rs.close

Response.Write UNIX_TIMESTAMP

??
Avatar billede gatez Nybegynder
05. november 2004 - 22:45 #4
Det virker nemlig ikke... endnu ;)
Avatar billede hmortensen Nybegynder
05. november 2004 - 22:48 #5
Du kan definere et alias, så du har et feltnavn at hive ud:
SELECT COUNT(*) AS antal FROM bruger WHERE (UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(sidstaktivtet)) < 14


Men hvordan man udskriver det i asp, ved jeg ikke, men det ved eagleeye.
(Vel bare rs.antal)
Avatar billede gatez Nybegynder
05. november 2004 - 22:52 #6
Okay...

Har også prøvet sådan:

Set rs = Conn.Execute("SELECT COUNT(*) FROM bruger WHERE (UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(sidstaktivtet)) < 14")
strsidstaktivtetantal_online_bruger = rs("antal")
rs.Close

Men den kommer bare med en fejl..
Avatar billede hmortensen Nybegynder
05. november 2004 - 22:53 #7
Du har ikke lavet aliaset:
SELECT COUNT(*) AS antal ....
Avatar billede gatez Nybegynder
05. november 2004 - 22:57 #8
Yes yes det hjalp... Dog kan dato og tids format ikke findes ved at bruge NOW() pga formaten er en anden i databasen...

Kan man ikke lave sådan:
(UNIX_TIMESTAMP(datoogtid)

Sådan at den henter dato og tid fra variablen datoogtid ?
Avatar billede hmortensen Nybegynder
05. november 2004 - 22:59 #9
Hvordan står din dato/tid i tabellen og hvilken felttype bruger du ?
Avatar billede gatez Nybegynder
05. november 2004 - 23:01 #10
Jeg løste det på en anden måden... Ved at ændre dato og tids format i databasen...

Nu virker det... Mange tak for hjælpe, det er kanont ;)

Smid et svar... ;)
Avatar billede hmortensen Nybegynder
05. november 2004 - 23:02 #11
Det var så lidt
Avatar billede gatez Nybegynder
05. november 2004 - 23:03 #12
Nej da, det var en mega stor hjælp...
Go Weekend ;)
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