Avatar billede michaeltryl Seniormester
04. december 2007 - 16:22 Der er 6 kommentarer og
1 løsning

hente dato som er 5 dage frem men større

Overskriften er måske ikke så tydlig så her en forklaring
Jeg er ved at lave ne side som skal hente 1 post fra en mysql database.
i databasen er det 1 felt af typen DATETIME.
her er datoerne f.eks
07-12-2007 15:00
29-05-2008 19:00
27-01-2008 19:00

5 dage før hver dato skal der så sendes en mail ud til brugerne som påminder dem om denne dato.

jeg har denne select;
mysql_query("SELECT *, DATE_FORMAT(dato, '%d-%m-%Y') AS datoen, DATE_FORMAT(dato, '%H:%i') AS tiden FROM kalender WHERE DATE_ADD(dato, INTERVAL 5 DAY) > NOW() AND sendt !="ja"

problemet er at den henter alle poster ud som er ældre end 5 dage.
en som har et bud på hvad jeg skal sætte på mere for at klare jobbet.
siden bliver kaldt med et cronjob.
Jeg har påtænkt at lave et felt i databasen af typen varchar(255) og kalde det sendt med en standard værdi "nej".
Når brugerne så er blevet påmindet bliver det felt sat til ja, men det afhjælper ikke at alle datoer bliver hentet ud

Håber dette er til at forstå ellers må i spørge
Avatar billede nemlig Professor
04. december 2007 - 17:52 #1
Det virker da til, at du selv har opskriften - nemlig lave et ekstra felt, og opdaterer det, når der er sendt email.

Så skal du jo bare have rettet din WHERE-parameter så den tæller dem der er under 5 dage og hvor der ikke er sat en parameter i det nye felt.
Avatar billede michaeltryl Seniormester
05. december 2007 - 17:23 #2
Ja det er en del af løsningen, men lad os sige at disse datoer er i databasen
07-12-2007 15:00
29-05-2008 19:00
27-01-2008 19:00

Så skal der 5 dage før den 07-12-2007 15:00 sendes en mail ud til brugerne.
mit cronjob tjekker dog dagligt for om der sakl udsendes en påmindelse, hvilket betyder at med den selct jeg har lavet her
mysql_query("SELECT *, DATE_FORMAT(dato, '%d-%m-%Y') AS datoen, DATE_FORMAT(dato, '%H:%i') AS tiden FROM kalender WHERE DATE_ADD(dato, INTERVAL 5 DAY) > NOW() AND sendt !="ja"
vil den dagligt sende en mail ud da den altid vil finde en dato som er ældre end fem dage.

derfor skal jeg have lavet noget der gør at den kun finde den dato som er ældre end fem dage, men ikke ældre end 6 dage.
jeg har prøvet med
mysql_query("SELECT *, DATE_FORMAT(dato, '%d-%m-%Y') AS datoen, DATE_FORMAT(dato, '%H:%i') AS tiden FROM kalender WHERE DATE_ADD(dato, INTERVAL 5 DAY) > NOW() AND !DATE_ADD(dato, INTERVAL 6 DAY) > NOW() AND sendt !="ja"

men det virker ikke.
måske gør jeg det på en dum måde, så har du en bedre måde høre jeg det gerne
Avatar billede nemlig Professor
05. december 2007 - 18:32 #3
Jeg ville gøre det på denne måde:
1. Select de aftaler, hvor der fra d.d. og til dato i tabel er 5 dage eller mindre, og hvor der ikke er sendt email:
SELECT .....WHERE dato BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 5 DAY)AND sendt !="ja"

2. Send email.

3. Marker i posten, at email er sendt
UPDATE.....SET sendt="ja" WHERE dato BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 5 DAY)AND sendt !="ja"


Så er emailen sendt og posten har fået markeringen, at den er sendt.
Avatar billede michaeltryl Seniormester
05. december 2007 - 19:19 #4
det var lige det jeg manglede til min select.
Mange tak for hjælpen og bare smid et svar
Avatar billede nemlig Professor
05. december 2007 - 19:30 #5
Hermed et svar.
Ved at anvende en periode fra d.d. + 5 dage, sikrer du også, at en post "fanges", hvis cronjobbet springes over 1 dag ved en fejl. Så bliver posten fanget næste dag.
Avatar billede nemlig Professor
05. december 2007 - 19:30 #6
Så kom svaret.
Avatar billede michaeltryl Seniormester
05. december 2007 - 19:57 #7
ja det er rigtigt, igen tak for hjælpen
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