Ik wil met onderstaande query de verjaardagen van deze week halen, behalve vandaag. Maar helaas lukt het niet om de verjaardagen van vandaag over te slaan.
Weet iemand een manier? Die ook werk bij de schrikkeljaren en jaren voor 1970?
SELECT *,
DAYOFMONTH ( datum ) AS dag,
MONTH ( datum ) AS maand,
(YEAR( CURRENT_DATE( ) ) - YEAR(datum)) AS leeftijd
FROM `verjaardag`
WHERE
(
DAYOFYEAR( CURRENT_DATE( ) ) > DAYOFYEAR( DATE_SUB( datum, INTERVAL 7 DAY ) )
AND DAYOFYEAR( CURRENT_DATE( ) ) <= DAYOFYEAR( DATE_SUB( datum, INTERVAL 7 DAY ) ) +7
)
OR
(
DAYOFYEAR( CURRENT_DATE( ) ) > DAYOFYEAR( datum ) -7
AND DAYOFYEAR( CURRENT_DATE( ) ) <= DAYOFYEAR( datum )
)
ORDER BY maand, dag, leeftijd ASC
Gooi de backtics ` nog even met een grote boog richting prullenbak, dat is de enige juiste plek voor deze zooi.
De jaren voor 1970 zijn geen enkel probleem. Tenzij jij een TIMESTAMP gebruikt, maar dan vraag je ook om problemen... Gebruik een DATETIME en dat probleem is ook weer de wereld uit.
Wanneer je niet de verjaardagen van vandaag wilt hebben, dan moet je nog even een AND toevoegen die de verjaardagen van vandaag buitensluit.
En hoe zou ik dan de verjaardagen van vandaag moeten uitsluiten?
Met dit : DAYOFYEAR( datum ) > (DAYOFYEAR( CURRENT_DATE )+1) lukt dat niet want in een schrikkeljaar veranderd dit.
Zit me hier suf te piekeren hoe ik dit aan zal pakken en met Google kom ik ook niet verder.
Ik maak trouwens gebruik van een DATE field dus dat zit dacht ik wel goed.
@ Jan
Dit is niet de oplossing tot mijn probleem volgens mij?
Waarom gebruik je CONCAT? Je haalt nu heel omslachtig YYYY-MM-DD uit een DATE field? Maar met CURDATE doe je toch hetzelfde? En wat doet WEEK dan voor jouw, precies?
Even mijn voorbeeld duidelijker formuleren:
De opbouw van de tabel is :
CREATE TABLE `verjaardag` (
`id` int(8) NOT NULL auto_increment,
`datum` date NOT NULL default '0000-00-00',
`lid` varchar(255) NOT NULL default '',
PRIMARY KEY (`id`) ) TYPE=MyISAM;
En een deel van de data:
1955-10-26 André Dubbeldam
1988-10-26 Cornélie van Houwelingen
1985-10-26 Linda van Wijngaarden
1960-10-27 Janny Visscher
1960-10-29 Leo Visscher
1950-10-30 Geertje van Kooten
1980-10-31 Jeroen van Andel
2005-11-01 Test naam
1984-11-03 Jurgen Adriaanse
1990-11-07 Hanna van der Ham
Met jouw(Jan) query krijg ik het volgende :
André Dubbeldam 1955-10-26
Cornélie van Houwelingen 1988-10-26
Janny Visscher 1960-10-27
Leo Visscher 1960-10-29
Jeroen van Andel 1980-10-31
Je ziet een jarige in het verleden (gisteren) en de jarige "Test naam" valt toch ook binnen een week?
In feite wil ik alle jarigen binnen nu en zeven dagen en niet die van vandaag. Met die van vandaag wil ik iets anders gaan doen....
@Frank
De reden van dat 1970 erbij zet is dat niemand met het advies van UNIX_TIMESTAMP komt.
Wat die backtopics betreft, waarom geeft PHPMyadmin dit wel? Het werkt ook zonder oke maar snap je opmerking niet zo.
@ Jan
Dit is niet de oplossing tot mijn probleem volgens mij?
Waarom gebruik je CONCAT? Je haalt nu heel omslachtig YYYY-MM-DD uit een DATE field? Maar met CURDATE doe je toch hetzelfde? En wat doet WEEK dan voor jouw, precies?
Ik neem aan dat in dat DATE field de geboortedatum van een persoon staat? Dan geeft die CONCAT die ik gebruik de verjaardag in het huidige jaar. Heb je de query uitgetest? Uit je "volgens mij" maak ik op van niet?
Met jouw(Jan) query krijg ik het volgende :
André Dubbeldam 1955-10-26
Cornélie van Houwelingen 1988-10-26
Janny Visscher 1960-10-27
Leo Visscher 1960-10-29
Jeroen van Andel 1980-10-31
Je ziet een jarige in het verleden (gisteren) en de jarige "Test naam" valt toch ook binnen een week?
In feite wil ik alle jarigen binnen nu en zeven dagen en niet die van vandaag. Met die van vandaag wil ik iets anders gaan doen....
Zo heb je je vraag niet geformuleerd aan het begin van je topic! Je vroeg dit:
Ik wil met onderstaande query de verjaardagen van deze week halen, behalve vandaag. Maar helaas lukt het niet om de verjaardagen van vandaag over te slaan.
De verjaardagen van deze week betekent: als het nu woensdag is, alle verjaardagen vanaf maandag tot zondag, behalve woensdag. Je kunt de week ook op zondag beginnen eventueel. Als je de verjaardagen van de komende zeven dagen wilt, is dat een andere query.
Ik neem aan dat in dat DATE field de geboortedatum van een persoon staat? Dan geeft die CONCAT die ik gebruik de verjaardag in het huidige jaar. Heb je de query uitgetest? Uit je "volgens mij" maak ik op van niet?
In het DATE field staan idd de geboortedata. De query heb ik getest en heb ik hierboven geplaatst.
@Boris();
Ik zal hem gaan testen ziet er leuk uit, kan ik best wat mee. Maar ik zie nergens de filter om vandaag uit te sluiten?