login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Verjaardagen tonen (Opgelost)

Offline Gezienus - 13/11/2012 07:25 (laatste wijziging 13/11/2012 07:42)
Avatar van GezienusLid Ik heb een tabel met daarin alle leden en wanneer deze jarig zijn.

Nu wil ik graag alle leden selecteren die de komende 4 weken jarig zijn.

Ik heb nu:

  1. $qry = mysql_query("SELECT * FROM leden WHERE MONTH(geboorte) = MONTH (NOW())") or die (MySQL_Error())


Nu kan ik alleen de verjaardagen in de lopende maand tonen. Hoe doe ik dat als ik de verjaardagen van de komende 4 weken wil tonen (dus over een maandovergang heen) en verjaardagen uit het verleden niet wil tonen.

5 antwoorden

Gesponsorde links
Offline WouterJ - 13/11/2012 08:20 (laatste wijziging 13/11/2012 08:21)
Avatar van WouterJ HTML gevorderde
  1. SELECT name, birthday
  2. FROM users
  3. WHERE DATEDIFF(CURDATE(), birthday) < 28

(DATEDIFF geeft verschil in dagen)

Nog wat PHP tips:
- Gebruik goede foutafhandeling (http://wouterj.github.com/sql-boilerplate );
- Gebruik geen * maar selecteer wat je wilt;
- Sla de query op in een variabele, zodat je hem kunt echoën bij het debuggen.
Offline Gezienus - 14/11/2012 17:51
Avatar van Gezienus Lid Het probleem is natuurlijk nog dat ook de jaartallen in tabel staan en er dus nooit iemand binnen de 4 weken jarig is.
Ik moet dus op de een of andere manier de jaartallen elimineren.
Mijn vraag is hoe???
Offline marten - 15/11/2012 08:53
Avatar van marten Beheerder Ik neem aan dat de kolom geboorte een date veld is ?
(datetime zou knap zijn )

Waarom zou je de jaartallen willen elimineren? Als je de date* functies gebruikt houd MySQL daar gewoon rekening mee.
Offline nick5556 - 15/11/2012 12:39 (laatste wijziging 15/11/2012 12:39)
Avatar van nick5556 PHP beginner Hij bedoeld denk ik dat je geen rekening moet houden met de jaren, ik weet niet precies hoe ik dit uit moet leggen dus even aan de hand van een voorbeeld.

Het is vandaag 15-11-2012. Petertje is geboren op 2-12-1991. Petertje is deze maand dus jarig en zal dus geselecteerd moeten worden maar omdat het verschil(in dagen) tussen deze twee getallen meer is als 28 word Petertje dus niet geselecteerd.

heb deze code niet getest en ik weet niet of DATEDIFF werkt met alleen de dag en maand, maar het lijkt mij dat je op deze manier het verschil in dagen kan ophalen(er van uitgaande dat het veld 'birthday' inderdaad een date veld is).
  1. SELECT name, birthday
  2. FROM users
  3. WHERE DATEDIFF(DATE_FORMAT(CURDATE(), '%c-%e'), DATE_FORMAT(birthday, '%c-%e')) < 28
Offline Gezienus - 16/11/2012 15:24 (laatste wijziging 17/11/2012 13:16)
Avatar van Gezienus Lid Bovenstaande werkt blijkbaar niet.

Ik heb het nu helemaal ander geprobeerd.
  1. SELECT * FROM leden WHERE (cnv_datkort($datum) >= strftime('%d-%m') AND (cnv_datkort($datum) < strftime('%d-%m') + INTERVAL 4 WEEK)"


waarbij cnv-datkort de volgende functie is:

  1. function cnv_datkort($datum)
  2. {
  3. // datum opsplitsen en valideren ( ':' weglaten )
  4. $da1 = substr($datum, 0, 4); // jaren (Y)
  5. $da2 = substr($datum, 5, 2); // maanden (m)
  6. $da3 = substr($datum, 8, 2); // dagen (d)
  7. $datum = $da3 . "-" . $da2;
  8. return $datum;
  9. }


Deze geeft echter een FATAL ERROR terug. Zijn er nog enige aanwijzingen
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.205s