Avatar billede hist Praktikant
18. oktober 2015 - 15:41 Der er 19 kommentarer

Mysql og dato

Jeg er ved at lave noget online count og har fundet det her gamle kode

$SQLonlineCOUNT = mysql_query("SELECT COUNT(*) AS count FROM profiler WHERE kon = 'kvinde' 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)") or die(mysql_error());
    $RSonlineCOUNT = mysql_fetch_array($SQLonlineCOUNT);

i tabellen profiler er der en kolonne der hedder onlinetime og der stå deres sidste reload af en side så den indholder datoen 2015-10-18 13:33:34
men hvordan skal jeg lave sql udtrækket så den tæller det rigtige ?

er i med i hvad jeg mener ?
Avatar billede erikjacobsen Ekspert
18. oktober 2015 - 16:03 #1
Det ville være meget nemmere at gemme onlinetime som en DATETIME, og så bare få PHP til at vende den om, når den skal vises på siden. Det er altid noget rod at blande de rå data sammen med GUI-visning.
Avatar billede hist Praktikant
18. oktober 2015 - 16:11 #2
okay tror du må forklare den hvordan jeg laver den.
Det er noget kode jeg skriver om.
Det er også DATETIME i db'en
Avatar billede erikjacobsen Ekspert
18. oktober 2015 - 17:00 #3
Hvis onlinetime er en DATETIME, skal du ikke lave noget om, men bare

  ...  DATE_ADD(profiler.onlinetime,INTERVAL 1 MINUTE)  ...
Avatar billede hist Praktikant
18. oktober 2015 - 17:17 #4
okay cool
nu har jeg lave det her
$SQLonlineCOUNT = mysql_query("SELECT COUNT(*) AS count FROM profiler WHERE kon = 'kvinde' AND NOW() <= DATE_ADD(profiler.onlinetime,INTERVAL 1 MINUTE)") or die(mysql_error());
    $RSonlineCOUNT = mysql_fetch_array($SQLonlineCOUNT);

men den er da ligeglad med om det er over 1 minuts forskæl på de to tider
Jeg skal bruge den til en online liste
Avatar billede erikjacobsen Ekspert
18. oktober 2015 - 17:26 #5
Så er spørgsmålet hvad du vil. Er onlinetime tidspunktet for brugerens sidste login? Så får du antallet på alle dem, der er logget ind fra om +1 minut. Det er vel alle - der er ikke mange der kan logge ind i fremtiden.
Avatar billede erikjacobsen Ekspert
18. oktober 2015 - 17:27 #6
Det er vist mig, der læser det forkert ;)  Det er alt for tidligt på dagen.

Du vil have antallet af dem, der er logget ind indenfor det sidste minuts tid?
Avatar billede hist Praktikant
18. oktober 2015 - 17:32 #7
haha tja tidlig og tidlig ;)

Ja jeg vil have alle dem der er logget inde for det sidste min men skal rette det så det er dem der er logget ind inden for desidste 15min det lyder mere rimligt ;D
Avatar billede erikjacobsen Ekspert
18. oktober 2015 - 18:10 #8
Lad os se. Klokken er måske 18.00 så vi skal have dem, der er logget ind mellem 17.45 og 18.00, så onlinetime skal være >= 17.45 og  <= 18.00. Det sidste er ligemeget, for man kan ikke logge ind i fremtiden, formentlig.

Så hvis onlinetiden +15 minutter ligger efter now. Dvs. 17.45 bliver 18.00, 17.50 bliver til 18.05 osv. så må det være noget med onlinetid+15 >= now() - og det er hvad du har nu ..... hvad er det der ikke virker?
Avatar billede hist Praktikant
18. oktober 2015 - 18:45 #9
forstå det ikke helt
jeg har den her kode her

$SQLonlineCOUNT = mysql_query("SELECT COUNT(*) AS count FROM profiler WHERE kon = 'kvinde' AND NOW() <= DATE_ADD(profiler.onlinetime,INTERVAL 15 MINUTE)") or die(mysql_error());
    $RSonlineCOUNT = mysql_fetch_array($SQLonlineCOUNT);
og online time i dben er 2015-10-18 18:20:34

og nu ville jeg tælle dem der er logget ind mellem 18:20 og 18:35 og ikke dem der er logget ind kl 18:19
Avatar billede hist Praktikant
18. oktober 2015 - 18:46 #10
det der ikke virker er at når jeg har en der er logget ind kl 13 så tæller den også den med
Avatar billede hist Praktikant
18. oktober 2015 - 18:48 #11
hov nej vent det virker da vist
Avatar billede hist Praktikant
18. oktober 2015 - 18:50 #12
aa ved ikke helt om det virker for selvom der stå et minute så skal den over to timer før den forsvinder
Avatar billede erikjacobsen Ekspert
18. oktober 2015 - 19:06 #13
Det er ikke noget med at tiderne ikke er fra samme tidszone? Der er 2 timer fra dansk regnskovstid til GMT
Avatar billede hist Praktikant
19. oktober 2015 - 11:09 #14
Du er sku en klog mand &#128077;
Nu laver jeg en date(yme his) i top af alle sider så bliver tiden da ens.
Tak for hjælpen.
Avatar billede erikjacobsen Ekspert
19. oktober 2015 - 11:18 #15
Det var bare et gæt :)

Husk at acceptere dit eget svar.
Avatar billede hist Praktikant
14. november 2015 - 15:48 #16
nåå ja skal jeg gøre.
men nu når jeg har dig ville jeg lige spørge dig om hvordan du så ville oversætte den her.

SQLCookie_1 = "select hotbilleder.* from  (  hotbilleder LEFT JOIN profiler ON (hotbilleder.profilerID = profiler.id)  )    LEFT JOIN blockliste ON profiler.id = blockliste.profilerID where (blockliste.blockID <> '"&session("ID")&"' or  blockliste.blockID is null) AND hotbilleder.godkendt = '1' AND profiler.kon = '1' AND profiler.id <> '"& session("ID") &"' 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 RAND()"
Avatar billede erikjacobsen Ekspert
14. november 2015 - 18:40 #17
Hej igen

Oversætte? Fra hvad til hvad? Hvorfor?
Avatar billede hist Praktikant
14. november 2015 - 19:44 #18
Jeg bruger DATETIME i databasen
og den sql er er vist ikke i det, Jeg køre php og det her er fra et asp script

SQLCookie_1 = "select hotbilleder.* from  (  hotbilleder LEFT JOIN profiler ON (hotbilleder.profilerID = profiler.id)  )    LEFT JOIN blockliste ON profiler.id = blockliste.profilerID where (blockliste.blockID <> '"&session("ID")&"' or  blockliste.blockID is null) AND hotbilleder.godkendt = '1' AND profiler.kon = '1' AND profiler.id <> '"& session("ID") &"' 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 RAND()"
Avatar billede erikjacobsen Ekspert
14. november 2015 - 21:17 #19
Lidt hjælp til selvhjælp ;)

I PHP skal du naturligvis bruge prepared statements. Læs http://www.eksperten.dk/guide/1480

Og så skal du lade være med at opbevare datoer i databasen som: 31-12-2015, men bruge standardformen: 2015-12-31 dvs. datetime - så skal du ikke lave de der omskrivninger i SQL.
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

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