Ik wil een zeer flexibel taken systeem maken. Nu kan ik hiervoor heel veel cronjobs maken, maar deze kan ik niet eenvoudig editten. Ik heb dus besloten om dit met behulp van een MySQL database te gaan doen. Elk uur wordt dmv een php scriptje de database gescand op taken die eventueel uitgevoerd moeten worden. In deze database heb ik de kolommen:
id int
year int null
month int null
week int null
day int null
hour int null
task text
status enum(open,gesloten)
Als een tijdseenheid de waarde null heeft dan moet deze taak voor die tijdseenheid elke keer uitgevoerd worden (hetzelfde effect als * bij cronjobs).
Met de volgende query haal ik de taken op:
Deze query haalt de taken netjes op en dan kan ik ze uitvoeren. Echter sommige taken zullen maar 1x of een aantal keer uitgevoerd worden en erna nooit meer. Deze kunnen dus gedelete worden, zodra ze nooit meer worden uitgevoerd. Nu zoek ik dus een functie die aan de hand van een aantal tijdseenheden kan checken of de taak nog vaker uitgevoerd zal worden of niet. Zelf heb ik iets bedacht met allerlei if constructies, alleen dit is 1 grote puinzooi. Volgens mij moet dit op een recursieve manier heel makkelijk te doen zijn. Echter vind ik het bedenken van recursieve functies zeer lastig, in verband met oneindige loops. Nu weet ik niet of recursief de oplossing is, maar mijn gevoel zegt van wel, omdat je eerst naar het jaar moet kijken of deze null of het huidige jaar is en dan naar de maand etc etc..
Misschien kan het wel veel eenvoudiger en zit ik op een verkeerd spoor.
id int
year int null
month int null
week int null
day int null
hour int null
task text
status enum(open,gesloten)
Als een tijdseenheid de waarde null heeft dan moet deze taak voor die tijdseenheid elke keer uitgevoerd worden (hetzelfde effect als * bij cronjobs).
Met de volgende query haal ik de taken op:
PHP:
1
2
3
4
5
| $year = date("Y"); $month = date("n"); $week = ltrim(date("W"),"0"); $day = date("j"); $hour = date("G"); |
MySQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| SELECT id, year, month, week, day, hour, task, status FROM tasks WHERE (year=$year OR year IS NULL) AND (month=$month OR month IS NULL) AND (week=$week OR week IS NULL) AND (day=$day OR day IS NULL) AND (hour=$hour OR hour IS NULL) |
Deze query haalt de taken netjes op en dan kan ik ze uitvoeren. Echter sommige taken zullen maar 1x of een aantal keer uitgevoerd worden en erna nooit meer. Deze kunnen dus gedelete worden, zodra ze nooit meer worden uitgevoerd. Nu zoek ik dus een functie die aan de hand van een aantal tijdseenheden kan checken of de taak nog vaker uitgevoerd zal worden of niet. Zelf heb ik iets bedacht met allerlei if constructies, alleen dit is 1 grote puinzooi. Volgens mij moet dit op een recursieve manier heel makkelijk te doen zijn. Echter vind ik het bedenken van recursieve functies zeer lastig, in verband met oneindige loops. Nu weet ik niet of recursief de oplossing is, maar mijn gevoel zegt van wel, omdat je eerst naar het jaar moet kijken of deze null of het huidige jaar is en dan naar de maand etc etc..
Misschien kan het wel veel eenvoudiger en zit ik op een verkeerd spoor.
[ Voor 3% gewijzigd door RSD op 17-02-2009 11:37 ]