Graag zou ik de resultaten van vandaag en de rest van de maand willen tonen.
SELECT event_id, datetime
FROM sportevenementen
WHERE MONTH(datetime) = MONTH(NOW()) ORDER BY `datetime` ASC
Met de query hierboven krijg ik alle resultaten van de maand.
Graag zou ik de resultaten van vandaag 8 oktober en de rest van de maand willen zien.
Volgens mij gebruik ik daarvoor de CURDATE, maar weet ik niet hoe ik deze kan toepassen in de query.
Heeft iemand een idee, hoe ik dit zou kunnen aanpassen?
Neemt niet weg dat je vragenstellers ook goede programmeergewoonten mag meegeven. Als je een oplossing geeft, dan zou je verder moeten gaan dan het simpelweg geven van de oplossing (iets met vissen en hengels).
Om maar een hier gebezigde uitspraak aan te halen: "het is hier geen afhaalchinees". Dit forum moet echt af van het simpelweg faciliteren, je mag antwoorden best onderbouwen. Ik denk dat mijn argumenten voor mijn aanpak duidelijk zijn.
Ik kijk op een iets grotere afstand naar het vraagstuk: welke informatievraag wil je beantwoord zien? "Ik wil alle informatie tussen twee datums". En toevallig is dat nu de huidige dag en en einde van de maand, maar dit kan op den duur best iets anders zijn. Als je het niet nodig hebt, maakt het niet zoveel uit welke aanpak je kiest. Als je het wel nodig hebt, dan heb je profijt van een generieke(re) aanpak en hoef je niet opnieuwe queries open te breken.
Om hier nog even op terug te komen. Wat je ook kunt doen is gebruik maken van een zogenaamd "half open domein". Hierbij kijk je van (en met) waarde A tot (en zonder) waarde B, of anders gezegd:
A <= waarde < B
Het "voordeel" hiervan is dat deze intervallen als LEGO-stenen op elkaar aansluiten. Als je bijvoorbeeld een ander interval hebt van (en met) B tot (en zonder) C, dan vormen deze intervallen samen een naadloos geheel.
Je zou dus ook kunnen gaan voor het volgende in plaats van BETWEEN, maar dit is equivalent met de eerdere oplossing:
<?php
$dt = new DateTime();
// these dates can be... anything really
$intervalStart = $dt->format('Y-m-d'); // today
$intervalEnd = $dt->modify('first day of next month')->format('Y-m-d'); // first day of next month
$sql =
"SELECT event_id, datumtijd
FROM sportevenementen
WHERE '".$intervalStart."' <= datumtijd
AND datumtijd < '".$intervalEnd."'
ORDER BY datumtijd ASC";
echo $sql;
?>