01. juli 2004 - 14:36Der 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
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?
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())"
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)"
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.
"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))"
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.