Avatar billede tzag_dk Nybegynder
01. juli 2004 - 14:36 Der er 18 kommentarer og
1 løsning

SQL Sætning

Hej

Jeg bruger denne sql for at finde ud af om en bruger er online eller offline. Det virker også til dels, men de brugere som der var logget ind i sidste måned bliver vist som online?!?

SELECT profiler.* FROM profiler LEFT JOIN profilbilleder ON profiler.id=profilbilleder.profilerID WHERE (profilbilleder.profilerID IS NULL OR profilbilleder.godkendt = '0') AND profiler.onlinetime >= '"& dateadd("n", -1, now()) &"' ORDER BY profiler.onlinetime >= '"& dateadd("n", -1, now()) &"'

profiler.onlinetime = 16-06-2004 14:02:09

Hvis brugeren har sådan en dato, bliver brugeren vist som online selv om at dato´en i dag er: 01-07-2004 14:40:09

Håber at der er nogle som der kan se problemet :o)
// Rene
Avatar billede codebase Praktikant
01. juli 2004 - 14:41 #1
AND profiler.onlinetime > 0 AND profiler.onlinetime >= '"& dateadd("n", -1, now()) &"
Avatar billede tzag_dk Nybegynder
01. juli 2004 - 14:46 #2
Det virker desværre ikke :-(
Det ændre ikke på noget.
Avatar billede tzag_dk Nybegynder
01. juli 2004 - 14:48 #3
Det er forresten en MySQL DB :-)
Avatar billede codebase Praktikant
01. juli 2004 - 14:50 #4
er problemet ikke at 16-06-2004 14:02:09 er < 17-01-2004 14:02:09 ?
dvs du skal lave datoen om til 2004-16-06
Avatar billede tzag_dk Nybegynder
01. juli 2004 - 14:57 #5
Hvis datoerne ser sådan her ud, bliver brugeren ikke vist som online:
profiler.onlinetime = 01-07-2004 08:02:43
now() = 01-07-2004 14:02:09

Men hvis det er sådan her, hvor vi går en måned tilbage, bliver brugeren vist som online:
profiler.onlinetime = 30-06-2004 08:02:43
now() = 01-07-2004 14:02:09

Brugeren skal kun vises som online hvis 'profiler.onlinetime' >= dateadd("n", -1, now())
Kan du følge mig i det?
Avatar billede codebase Praktikant
01. juli 2004 - 15:19 #6
ikke rigtig :).. Afvent et andet svar..
Avatar billede eagleeye Praktikant
01. juli 2004 - 18:45 #7
Prøv at bruge den interne dataadd funktion, hvis det access så det sådan her:

"SELECT profiler.* FROM profiler LEFT JOIN profilbilleder ON profiler.id=profilbilleder.profilerID WHERE (profilbilleder.profilerID IS NULL OR profilbilleder.godkendt = '0') AND profiler.onlinetime >= '"& dateadd("n", -1, now()) &"' ORDER BY profiler.onlinetime >= dateadd('n', -1, Now())"
Avatar billede tzag_dk Nybegynder
01. juli 2004 - 18:46 #8
Det er en MySQL DB, men jeg prøver lige :-)
Avatar billede tzag_dk Nybegynder
01. juli 2004 - 18:47 #9
Hov... Jeg kan ikke prøve lige nu, da serveren lige er taget på sin egen safari :-(
Avatar billede eagleeye Praktikant
01. juli 2004 - 18:47 #10
Så skal den laves på en anden måde.
Avatar billede eagleeye Praktikant
01. juli 2004 - 18:54 #11
I mySQL skal der en _ ind i navet samt man kan bruger DATE_SUB. Så prøv når serveren er klar igen :)


"SELECT profiler.* FROM profiler LEFT JOIN profilbilleder ON profiler.id=profilbilleder.profilerID WHERE (profilbilleder.profilerID IS NULL OR profilbilleder.godkendt = '0') AND profiler.onlinetime >= '"& dateadd("n", -1, now()) &"' ORDER BY profiler.onlinetime >= DATE_SUB(NOW(),INTERVAL 1 MINUTE)"


Se evt. mere her:
http://dev.mysql.com/doc/mysql/en/Date_and_time_functions.html
Avatar billede tzag_dk Nybegynder
01. juli 2004 - 18:55 #12
Det vil jeg prøve til den tid :-)
Tak for det ind til vidre :o)
Avatar billede tzag_dk Nybegynder
05. juli 2004 - 00:07 #13
Hej

Det virker desværre ikke :-( Har du evt. en anden løsning?
Avatar billede eagleeye Praktikant
05. juli 2004 - 17:32 #14
Hvilken data type er kolonnen profiler.onlinetime ?
Avatar billede tzag_dk Nybegynder
05. juli 2004 - 17:42 #15
Den er af typen "text"
Avatar billede eagleeye Praktikant
05. juli 2004 - 18:20 #16
Ok hvordan ser din SQL sætning ud lige nu?
Avatar billede eagleeye Praktikant
05. juli 2004 - 18:30 #17
Der er umiddebart to ting, den ene er hvis du bruger den SQL sætning som jeg har vist er det ikke rettet for WHERE delen men kun for ORDER BY delen, som det ikke er nødvedigt i, så det skal være:


"SELECT profiler.* FROM profiler LEFT JOIN profilbilleder ON profiler.id=profilbilleder.profilerID WHERE (profilbilleder.profilerID IS NULL OR profilbilleder.godkendt = '0') AND profiler.onlinetime >= DATE_SUB(NOW(),INTERVAL 1 MINUTE) ORDER BY profiler.onlinetime >= DATE_SUB(NOW(),INTERVAL 1 MINUTE)"


Den anden ting er:
>>Den er af typen "text"
Når ja så det jo derfor det ikke virker :)

Når du sammenligner Text og DateTime format vil den sammeligne det som text og der er karakter for karakter og så er "1" størrere end "0".

Så du skal enten lave kolonne om til DateTime format og i mySQL dataformat som er yyyy-mm-dd hh:nn:ss eller lave SQL sætningen sådan den formatere kolonnnen profiler.onlinetime til et gyldigt dataformat vedhjælp af streng funktioner.

CONCAT(SUBSTRING(profiler.onlinetime,7,4),'-',SUBSTRING(profiler.onlinetime,4,2),'-',SUBSTRING(profiler.onlinetime,1,2),' ',SUBSTRING(profiler.onlinetime,12,8))


Så din SQL sætning bliver:

"SELECT profiler.* FROM profiler LEFT JOIN profilbilleder ON profiler.id=profilbilleder.profilerID WHERE (profilbilleder.profilerID IS NULL OR profilbilleder.godkendt = '0') AND NOW() <= DATE_ADD(CONCAT(SUBSTRING(profiler.onlinetime,7,4),'-',SUBSTRING(profiler.onlinetime,4,2),'-',SUBSTRING(profiler.onlinetime,1,2),' ',SUBSTRING(profiler.onlinetime,12,8)),INTERVAL 1 MINUTE) ORDER BY CONCAT(SUBSTRING(profiler.onlinetime,7,4),'-',SUBSTRING(profiler.onlinetime,4,2),'-',SUBSTRING(profiler.onlinetime,1,2),' ',SUBSTRING(profiler.onlinetime,12,8))"
Avatar billede tzag_dk Nybegynder
05. juli 2004 - 23:08 #18
Det er bare super. Jeg valgte at lave formatering af kolonnnen  :o)
Du må undskylde at jeg ikke lige har skrevet tilbare, men jeg har været til møder.

Mange tak for hjælpen! Lig et svar :-)
Avatar billede eagleeye Praktikant
05. juli 2004 - 23:36 #19
Ok her et svar :)
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