Wat is er mis met deze SQL?:


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.

Groet
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


:( toch nog eventjes verder puzzelen :-P
@ Klaasjan: jouw query kan sowieso niet, want iemands geboortedatum ligt nooit tussen vandaag en volgende week ;-)
Nee dat weet ik Jan. En vandaar dat ik al eengaf dat ik het zo een 2 drie niet wist
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.
Iets met:

SELECT DATE_ADD(geboortedatum, INTERVAL (YEAR(CURDATE()) - YEAR(geboortedatum)) YEAR) AS geboortedatum FROM tabel;


?
@Jan's post:

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'];
}
?>

Zoiets? Toch best ingewikkeld nog !!
Dus:


SELECT user, geboortedatum FROM users WHERE DATE_ADD(geboortedatum, INTERVAL (YEAR(CURDATE()) - YEAR(geboortedatum)) YEAR) BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 7 DAY);
Jaaaaaaaaaaa:-D

SELECT 
    user, geboortedatum
FROM 
    users
WHERE 
        DATE_ADD( geboortedatum, INTERVAL( YEAR( CURDATE( ) ) - YEAR( geboortedatum ) ) YEAR )
        BETWEEN 
        NOW( )
    AND 
        DATE_ADD( NOW( ) , INTERVAL 7 DAY ) ;


Hoe laat je dat inspringen?? :-/


[edit]Ik ben ook nooit tevreden he :-P[/edit]

Reageren