Avatar billede wolstrup Nybegynder
04. marts 2008 - 13:40 Der er 15 kommentarer og
1 løsning

query datoer

Hvordan laver jeg denne om så den kun sammenligner på datoen?

UNIX_TIMESTAMP(datetime) + ( 86400 * ".$days." ) = UNIX_TIMESTAMP( NOW() )
Avatar billede djblaz Nybegynder
04. marts 2008 - 15:20 #1
vil tro det er sådan er ikke sikker
UNIX_TIMESTAMP(datetime) + ( 86400 * ".$days." ) == UNIX_TIMESTAMP( NOW() )
Avatar billede wolstrup Nybegynder
04. marts 2008 - 15:27 #2
Sætningen skulle være god nok, det er blot lidt svært at ramme den med et cronjob :) Derfor vil jeg bare nøjes med at matche på datoen.. Kan man bruge f.eks. DATEDIFF med UNIX_TIMESTAMP?
Avatar billede nielle Nybegynder
04. marts 2008 - 16:14 #3
Hvis der er noget som bare skal køres på et bestemt tidspunkt, hvad med så simpelthen at spørge om den ene dato har overskredet den anden?
Avatar billede wolstrup Nybegynder
04. marts 2008 - 16:28 #4
Nej, kan desværre ikke blot bruge "<", da det skal være på den aktuelle dato.
Avatar billede nielle Nybegynder
04. marts 2008 - 16:30 #5
Det er jo cronjobber som sørge for det - ved f.eks. at køre en gang i døgnet. Så kan du jo passende følge op med at notere i databasen at nu er det job så kørt - dermed bliver det ikke kørt igen næste gang cronjobbet køre.
Avatar billede wolstrup Nybegynder
04. marts 2008 - 16:34 #6
Ja, men det skal netop køre igen på et tidspunkt. Måske igen 7 dage senere. $days er jo variabel
Avatar billede nielle Nybegynder
04. marts 2008 - 16:40 #7
1) Opret et felt som har værdien for hvornår jobbet skal køre igen næste gang.
2) Når cronjobbet har kørt jobbet, opdateres dette felt med hvad der svare til +7 dage.
3) Så vil cronjobber først udføre jobbet næste gang igen når værdien overskrider det nye tidspunkt.

Meeeen, alt andet lige så ville det nu være letter hvis du brugte et rigtigt datofelt istedet for et timestamp.
Avatar billede wolstrup Nybegynder
04. marts 2008 - 21:21 #8
I dit eksempel låser jeg jo min variabel fast. Queryen køre i en løkke så $days, kan f.eks. være 7, 14, 21 osv. Men den kan hele tiden ændres, og der kan slettes og tilføjes variabler.

Mine felter er af typen datetime, er der en anden måde at gøre det på?
Avatar billede nielle Nybegynder
05. marts 2008 - 18:17 #9
Jeg ved ikke lige hvad du mener med at du låser din variabel fast?

Nå, men hvis felterne allerede er af typen datetime, så er der ingen som helst grund til at gå rundt om timestamps. Så burde det kunne gøres sådan:

... WHERE DATE_ADD(ditDatoFelt, INTERVAL $days DAY) = CURDATE()
Avatar billede wolstrup Nybegynder
06. marts 2008 - 08:16 #10
Har selv prøvet helt det samme blot med CUR_DATE() i enden, men synes ikke rigtig det vil spille :(
Avatar billede nielle Nybegynder
06. marts 2008 - 22:07 #11
Der er nu ikke noget som hedder CUR_DATE(). Der er noget som hedder CURRENT_DATE(), men det er blot et synonym/alias for CURDATE().

Umiddelbart ville jeg mene at det burde spille, men det siger du jo at det ikke gør ... uden dog at forklare nærmere hvad du mener præcist?

En anden løsning, som burde gøre det samme er:

... WHERE DATEDIFF(CURDATE(), ditDatoFelt) == $days


Du kan forresten læse mere om dato/tidsfunktionerne her:

http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_datediff
Avatar billede wolstrup Nybegynder
06. marts 2008 - 22:55 #12
Har fået det til at spille, løsningen var:

ADDDATE(DATE(datofelt), INTERVAL $days DAY) = CURDATE()

Men smid du bare et svar :)
Avatar billede nielle Nybegynder
06. marts 2008 - 23:04 #13
Svar :^)
Avatar billede nielle Nybegynder
06. marts 2008 - 23:06 #14
ADDDATE() er identisk med DATE_ADD().
Avatar billede wolstrup Nybegynder
06. marts 2008 - 23:26 #15
Mystisk.. Den ville ikke med DATE_ADD(). Nå men tak for kampen, tror sgu det er sengetid nu :)
Avatar billede nielle Nybegynder
07. marts 2008 - 06:58 #16
Måske er det fordi at du har sat den DATE(...) ekstra ind :^)
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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