Nieuw lid |
|
[color=red]
Wat is voor onzin hier, ik bijna zeggen asociaal. Men stelt een vraag, krijgt antwoord, en komt vervolgens niet meer terug in de topic!
Houdoe!!!!!!!!
[/color]
_____________
Nouja zo makkelijk is het niet
Als je in MySQL een datum hebt, dan is dit de afgelopen (of dezelfde) woensdag:
DATE_SUB( DATE(`datum`) , INTERVAL (DAYOFWEEK(`datum`)+3)%7 DAY )
DATE_SUB( DATE(`datum`) , INTERVAL (DAYOFWEEK(`datum`)+3)%7 DAY )
en dan is dit de volgende woensdag: (altijd 7 dagen later)
DATE_ADD( DATE(`datum`) , INTERVAL ((10-DAYOFWEEK(`datum`))%7)+1 DAY )
DATE_ADD( DATE(`datum`) , INTERVAL ((10-DAYOFWEEK(`datum`))%7)+1 DAY )
Nu heb je een tabel `wedstrijden` met o.a. een kolom `datum` en je wilt de wedstrijden selecteren vanaf afgelopen woensdag tot volgende woensdag.
Op zich hoef je maar 1 van die twee formules te gebruiken.
Bijvoorbeeld die bovenste:
SELECT * FROM `wedstrijden` WHERE
DATE_SUB(DATE(`datum`), INTERVAL (DAYOFWEEK(`datum`)+3)%7 DAY)
= DATE_SUB(CURDATE(), INTERVAL (DAYOFWEEK(CURDATE())+3)%7 DAY)
;
SELECT * FROM `wedstrijden` WHERE DATE_SUB(DATE(`datum`), INTERVAL (DAYOFWEEK(`datum`)+3)%7 DAY) = DATE_SUB(CURDATE(), INTERVAL (DAYOFWEEK(CURDATE())+3)%7 DAY) ;
Of die onderste:
SELECT * FROM `wedstrijden` WHERE
DATE_ADD(DATE(`datum`), INTERVAL ((10-DAYOFWEEK(`datum`))%7)+1 DAY)
= DATE_ADD(CURDATE(), INTERVAL ((10-DAYOFWEEK(CURDATE()))%7)+1 DAY)
;
SELECT * FROM `wedstrijden` WHERE DATE_ADD(DATE(`datum`), INTERVAL ((10-DAYOFWEEK(`datum`))%7)+1 DAY) = DATE_ADD(CURDATE(), INTERVAL ((10-DAYOFWEEK(CURDATE()))%7)+1 DAY) ;
Maar het is natuurlijk veel efficienter om het volgende te doen:
SELECT * FROM `wedstrijden` WHERE
`datum` >= DATE_SUB(CURDATE(), INTERVAL (DAYOFWEEK(CURDATE())+3)%7 DAY)
AND `datum` < DATE_ADD(CURDATE(), INTERVAL ((10-DAYOFWEEK(CURDATE()))%7)+1 DAY)
;
SELECT * FROM `wedstrijden` WHERE `datum` >= DATE_SUB(CURDATE(), INTERVAL (DAYOFWEEK(CURDATE())+3)%7 DAY) AND `datum` < DATE_ADD(CURDATE(), INTERVAL ((10-DAYOFWEEK(CURDATE()))%7)+1 DAY) ;
|