Verjaardags feesten
Ik heb een tabel met feesten (agenda), paar voorbeeld feesten
datum feest
09-11-2010 | Jan smit
12-12-2010 | Crazy Piano's
26-12-2010 | Hardcore
08-01-2011 | Stout
15-01-2011 | Allround
Een tabel met gebruikers (ook wat voorbeelden)
user | | bday_day | bday_month
1 | [email protected] |07 | 11
2 | [email protected] | 02 | 01
nou kunnen gebruikers online op de site een kaartje gratis bestellen als ze bijna jarig zijn , (30 dagen ervoor tot 30 dagen erna), aldus , gebruiker 1, (om het even makkelijk te houden rond ik het af naar een hele maand) , kan op 07 - 10 - 2010 tot 07 - 12 - 2010 in die periode een kaartje bestellen gratis. Echter moet het feest dus ook in die periode zitten. Aldus krijgt hij op z'n scherm:
Toegangskaarten voor:
09-11-2010 | Jan smit
(want dit is het enige evenement in zijn periode)
Nu vraag ik dit op in de database met:
Code (php)
1
2
3
4
2
3
4
date > DATE_ADD( CONCAT( DATE_FORMAT( NOW( ) , '%Y' ) , '-', bday_month, '-', bday_day ) , INTERVAL -30
DAY )
AND date < DATE_ADD( CONCAT( DATE_FORMAT( NOW( ) , '%Y' ) , '-', bday_month, '-', bday_day ) , INTERVAL +30
DAY )
DAY )
AND date < DATE_ADD( CONCAT( DATE_FORMAT( NOW( ) , '%Y' ) , '-', bday_month, '-', bday_day ) , INTERVAL +30
DAY )
waarbij die dus 2010-11-07 interval - 30 doet en een keer + 30
Dit gaat allemaal goed, het hele jaar door, totdat je tegen de jaarwisseling komt.. gebruiker 2 is op 02-01 jarig.. maar het probleem is dat ik dus niet weet hoe ik de database kan laten vertellen dat hij dan jarig is in 2011.
Aldus wordt er gemaakt
2010-01-02 interval - 30 en keer + 30 , maar dat kan niet, want in die periode zijn er geen feesten die actueel zijn. Dit zou dus moeten worden 2011-01-02 .
Mijn oplossingen die ik bedacht had:
- Dagen tot je jarig bent berekenen… dus 02-01 is nog bijvoorbeeld 8 dagen.. dus date > NOW() interval + 38 dagen (standaard 30 + 8), echter dit kan niet, want die 'dagen tot je jarig bent' krijg je never nooit goed, je blijft altijd zitten met die jaarwisseling berekening.. hij rekent dus uit 24-12-2010 tot 02-01-2010 is nogal boven de 300. - 365 gaat niet, want als iemand jarig is op 25-12-2010 , ga je niet weer - 365 doen.
Ik heb als tijdelijke oplossing (wat dus niet voor elke gebruiker leuk is, want er zijn er 15.000) , het jaargetal naar 2011 zelf aangepast.
Code (php)
1
2
3
4
2
3
4
date > DATE_ADD( CONCAT( '2011' , '-', bday_month, '-', bday_day ) , INTERVAL -30
DAY )
AND date < DATE_ADD( CONCAT( '2011' , '-', bday_month, '-', bday_day ) , INTERVAL +30
DAY )
DAY )
AND date < DATE_ADD( CONCAT( '2011' , '-', bday_month, '-', bday_day ) , INTERVAL +30
DAY )
Nou zijn er nog mensen dit jaar jarig geweest, dus die hebben helaas even niks, maar de nieuwe wel.
'Tijdelijk' was dit een oplossing, maar volgend jaar komt het probleem uiteraard weer. Heeft iemand een idee hoe ik dit zou moeten oplossen? Of het is iets heel ingewikkelds , of iets heel simpels.
Bedankt alvast, en hoop dat het een beetje duidelijk is?
Gewijzigd op 25/12/2010 12:50:38 door Dani Kupers
Het probleem wat je omschrijft is een interessante, is het de bedoeling dat je dit helemaal in SQL oplost, of mag er ook PHP aan de pas komen?
Het liefst zo veel mogelijk SQL, maar mocht de berekening niet anders kunnen, dan moet er PHP bij. Ik vraag me sterk af of het wel mogelijk is. Heb veel websites/query's en berekeningen gedaan, maar hier zit ik al 3 dagen over te denken.
Hoop echt dat iemand met een eventuele oplossing zou komen :)
ps. Fijne 2e kerstdag ;)
Gewijzigd op 26/12/2010 06:00:30 door Dani Kupers
Of misschien moet je een covert() over die string halen
Bedankt voor je reactie, ik snap jou oplossing niet, deze staat gelijk aan mijn 'tijdelijke' oplossing. Handmatig 2011 invoeren blijft het probleem met jaarwisselingen houden. Graag hiervoor je toelichting (mits ik iets over het hoofd zie)
Bedankt!
Waarom scheid je de datum in dag en maand, waarom sla je niet gewoon de geboortedatum op in een date-type-veld? Dan kan je er een stuk makkelijker mee rekenen dan nu.
Thnx :)