ik zoek een oplossing voor het volgende..
uit de database zal de eerst volgende verjaardag moeten worden gehaald.
$result = mysql_query ("SELECT DATE_FORMAT(datum, '%d-%m-') AS datum FROM verjaardag ORDER BY datum ASC LIMIT 0 ,1") or die(mysql_error());
while($row = mysql_fetch_array($result)) {
echo "" . $row[0];
}
?><?php echo date("Y");?>
echter zal er een controlle moeten komen die kijkt of die datum niet al is geweest. de datum is opgeslagen als gebortedatum: YYYY-MM-DD heeft iemand hier een oplossing voor?, kon niks vinden via google.
$result = mysql_query ("SELECT
DATE_FORMAT(datum, '%d-%m-') AS datum
FROM
verjaardag
WHERE
MONTH(datum) >= MONTH(NOW())
AND DAY(datum) >= DAY(NOW())
ORDER BY
datum ASC
LIMIT 0,1 ") or die(mysql_error());
while($row = mysql_fetch_array($result)) {
echo "" . $row[0];
}
?><?php echo date("Y");?>
heb twee datums toegevoegd die al geweest zijn en hij geeft juni als output dus dat zal goed zijn.
@christiaan: dat je 12-22 krijgt komt door de sortering op datum ASC, hij pakt de eerste datum, en sorteert dus op jaar...
Edit: Vond deze query in de user comments van de mysql manual, deze rekent het aantal dagen uit tot de eerst volgende keer dat een datum voorkomt, en houdt rekening met oud en nieuw...
SELECT datum,
IF(DAYOFYEAR(datum) >= DAYOFYEAR(NOW()),
DAYOFYEAR(datum) - DAYOFYEAR(NOW()),
DAYOFYEAR(datum) - DAYOFYEAR(NOW()) +
DAYOFYEAR(CONCAT(YEAR(NOW()),'-12-31')))
AS dagenTotVerjaardag
FROM verjaardag
ORDER BY dagenTotVerjaardag;
@Rens: dat zou normaal niet mogen omdat we hem enkel dagen en maanden laten sorteren DATE_FORMAT(datum, '%d-%m-') AS datum
of zie ik dat verkeerd?
Dat zie je verkeerd ;-) Ik had in mijn query de select van DATE_FORMAT een andere naam gegeven, en sorteerde op de datum kolom. Ik deed dat omdat DATE_FORMAT een string teruggeeft, waardoor je dus geen juiste sortering als datum kunt doen. Ik had er alleen geen rekening mee gehouden dat bij een sortering op de kolom datum het jaar meegenomen wordt.
Het had dus een sortering op MONTH(datum) ASC, DAY(datum) ASC moeten zijn ofzo