MySQL: Jarigen komende week

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

K i p

K i p

22/10/2006 22:18:00
Quote Anchor link
Wat is er mis met deze SQL?:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
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
Gewijzigd op 01/01/1970 01:00:00 door K i p
 
PHP hulp

PHP hulp

18/11/2024 16:21:09
 
Niek s

niek s

22/10/2006 22:20:00
Quote Anchor link
Ik ben uber slegt in SQL, maar het lijk net alsof je hier:
MONTH(geboortedatum) BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 7 DAY)

De jarige van de komende 7 MAANDEN wil hebben? of waT?
Haal dat hele MONTH gedoe is weg (en dus ook het AND statement =P )
Gewijzigd op 01/01/1970 01:00:00 door niek s
 
K i p

K i p

22/10/2006 22:24:00
Quote Anchor link
er staat interval 7day in de DATE_ADD
 
Joren de Wit

Joren de Wit

22/10/2006 22:25:00
Quote Anchor link
Als geboortedatum van het type date of datetime is kun je gewoon de volgende query gebruiken:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
SELECT
    user,
    geboortedatum
FROM
    users
WHERE
    geboortedatum BETWEEN
    NOW() AND DATE_ADD(NOW(), INTERVAL 7 DAY)
 
K i p

K i p

22/10/2006 22:34:00
Quote Anchor link
Werkt niet :-( Heb namelijk een user met geboortedatum

1990-10-23

en die staat er niet bij:-(

check mijn ledenlijst-pagina-op-mijn-site
 
Klaasjan Boven

Klaasjan Boven

22/10/2006 22:36:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
SELECT
    user,
    geboortedatum
FROM
    users
WHERE
    geboortedatum
BETWEEN
    NOW()
AND
INTERVAL 7 DAY +NOW()

zoiets
Gewijzigd op 01/01/1970 01:00:00 door Klaasjan Boven
 
K i p

K i p

22/10/2006 22:37:00
Quote Anchor link
SQL:
SELECT user, geboortedatum FROM users WHERE geboortedatum BETWEEN NOW() AND NOW() +7 DAYS
Fout:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DAYS' at line 11
ERRNO:
1064
 
Klaasjan Boven

Klaasjan Boven

22/10/2006 22:41:00
Quote Anchor link
zie mijn edit
 
K i p

K i p

22/10/2006 22:44:00
Quote Anchor link
Geen error, maar ook geen jarigen. :-(

Ik heb het nog eens gechecked en er staat echt een user in de db met geboortedatum 1990-10-23
 
Klaasjan Boven

Klaasjan Boven

22/10/2006 22:45:00
Quote Anchor link
sql al eens in phpmyadmin uitgevoerd
 
Klaasjan Boven

Klaasjan Boven

22/10/2006 22:49:00
Quote Anchor link
Nee Boris ik zou het zo niet weten
 
Jan Koehoorn

Jan Koehoorn

22/10/2006 22:52:00
Quote Anchor link
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.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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
    "
;
?>
 
K i p

K i p

22/10/2006 22:53:00
Quote Anchor link
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
 
Jan Koehoorn

Jan Koehoorn

22/10/2006 22:57:00
Quote Anchor link
@ Klaasjan: jouw query kan sowieso niet, want iemands geboortedatum ligt nooit tussen vandaag en volgende week ;-)
Gewijzigd op 01/01/1970 01:00:00 door Jan Koehoorn
 
Klaasjan Boven

Klaasjan Boven

22/10/2006 22:59:00
Quote Anchor link
Nee dat weet ik Jan. En vandaar dat ik al eengaf dat ik het zo een 2 drie niet wist
 
Jan Koehoorn

Jan Koehoorn

22/10/2006 23:00:00
Quote Anchor link
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.
 
Legolas

Legolas

22/10/2006 23:03:00
Quote Anchor link
Iets met:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT DATE_ADD(geboortedatum, INTERVAL (YEAR(CURDATE()) - YEAR(geboortedatum)) YEAR) AS geboortedatum FROM tabel;


?
 
K i p

K i p

22/10/2006 23:05:00
Quote Anchor link
@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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?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 !!
 
Legolas

Legolas

22/10/2006 23:06:00
Quote Anchor link
Dus:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT user, geboortedatum FROM users WHERE DATE_ADD(geboortedatum, INTERVAL (YEAR(CURDATE()) - YEAR(geboortedatum)) YEAR) BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 7 DAY);
 
K i p

K i p

22/10/2006 23:16:00
Quote Anchor link
Jaaaaaaaaaaa:-D

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
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
Gewijzigd op 01/01/1970 01:00:00 door K i p
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.