SELECT
user,geboortedatum
FROM
users
WHERE
MONTH(geboortedatum) BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 7 DAY)
AND
DAY(geboortedatum) BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 7 DAY)
Ik probeer dus de jarigen van de komende week op te halen.
Ik heb je titel veranderd, want die kon echt niet.
Bij dit soort queries moet je altijd heel erg opletten. Je wilt de jarigen van komende week. Stel dat het vandaag 29 december is? Je hebt dus niet genoeg aan het maandnummer en het dagnummer. Ik heb nu even geen zin om in deze te duiken, maar als voorbeeld geef ik je een query die de eerstvolgende zes jarigen geeft, er van uitgaande dat de geboortedatum als een type DATE is opgeslagen.
Gegeven een tabel met geboortedatums, wie zijn de volgende
zes personen die jarig zijn?
<?php
$sql = "
SELECT datum,
CASE
WHEN MONTH(datum) < MONTH(CURDATE()) THEN CONCAT(YEAR(CURDATE())+1, DATE_FORMAT(datum, '-%m-%d'))
WHEN MONTH(datum) > MONTH(CURDATE()) THEN CONCAT(YEAR(CURDATE()), DATE_FORMAT(datum, '-%m-%d'))
WHEN MONTH(datum) = MONTH(CURDATE()) THEN
CASE
WHEN DAYOFMONTH(datum) < DAYOFMONTH(CURDATE()) THEN CONCAT(YEAR(CURDATE())+1, DATE_FORMAT(datum, '-%m-%d'))
WHEN DAYOFMONTH(datum) >= DAYOFMONTH(CURDATE()) THEN CONCAT(YEAR(CURDATE()), DATE_FORMAT(datum, '-%m-%d'))
END
END
AS volgende_verjaardag
FROM tabelnaam
ORDER BY volgende_verjaardag DESC
LIMIT 6
";
?>
MySQL gaf een lege resultaat set terug (0 rijen). (Query duurde 0.0003 sec)
SQL-query: SELECT user, geboortedatum
FROM users
WHERE geboortedatum
BETWEEN NOW( )
AND INTERVAL 7
DAY + NOW( )
LIMIT 0 , 30
Ik zie overigens (als ik mijn voorbeeld bekijk) dat de jarigen voor de komende week simpel zijn op te halen. Haal de LIMIT weg, en maak er een WHERE condition van die eist dat de datum tussen vandaag en 7 dagen verder ligt.
Sorry van de naam, zal beter mijn best doen volgende keer.
Verder met je query krijg ik eruit rollen:
•De geboorte datum van elke user gesorteerd op het volgende resultaat dat ik ook krijg:
•Van elke user (LIMIT 6) de volgende verjaardag, gesorteerd als volgt: de laatste verjaardag eerst.
Dat is opzich ook wel tof :-D
En hoe kan ik nu kijken of de eerstvolgende geboortedatum binnen een week is?
•Eerst maak ik van order by desc => order by asc
•Dan met php:
<?php
//het resultaat gefetched in de array $rij
if($rij['volgendeverjaardag'] < (date('Y m').date('d')+7))
{
echo $rij['volgendeverjaardag'];
}
?>
SELECT user, geboortedatum FROM users WHERE DATE_ADD(geboortedatum, INTERVAL (YEAR(CURDATE()) - YEAR(geboortedatum)) YEAR) BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 7 DAY);