Geburtstage in bestimmten Zeitraum
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
auslese
bestimmten zeitraum
betrachte
code
datenbank
datum
eigentliche abfrage
feld
format
geburtstag
juni
machen
mai
monat
sicherheit
tag
vorliegen
wandeln
wertigkeit
zahl
-
Hallo!
Ich suche eine Funktion, mit der ich alle Geburtag, die in einem bestimmten Zeitraum habe mittels php auslesen lassen kann.
Ich habe zur Zeit 4 Textfelder.
Start
Feld 1(Tag)
Feld 2(Monat)
Ende
Feld 3(Tag)
Feld 4(Monat)
Nun möchte ich eben die Geburtstage die in diesem bereich liegen auslesen lassen.
Das Problem ist wenn ich hingehe und nutze
EXTRACT(day FROM birthdate) und EXTRACT(month FROM birthdate)
das funktioniert zwar aber natürlich nur bedingt.
wenn ich z.b den 31.1 eingebe und den 12.12 dann bekomme ich kein Ergebnis, da dann ja 12 größer als 1 ist aber er sagt 31 größer als 12 ist.....
hat da jemand ne Ahnung wie ich das lösen kann?
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hi,
betrachte einfach Monat und Tag des Datums als ganze Zahl und zwar in der Wertigkeit Monat, Tag, wobei der Tag zweistellig angegeben wird. Der 15. März ist dann 315, der 7. Juni ist 607.
Den Wert aus der Datenbank erhältst du mit EXTRACT(MONTH_DAY FROM birthdate).
Den Wert für das Anfangsdatum erhältst du mit Feld1 + Feld2 * 100 (für das Enddatum analog). Evtl. mußt du noch den Text in eine Zahl wandeln mit z.B. intval().
Dann kannst du schauen ob der Geburtstag im gesuchten Bereich liegt.
Getestet habe ich es nicht ;).
Gruß
Manni -
Hi,
vielleicht erklärst Du uns auch mal, in welchem Format Du den Geburtstag in der Datenbank gespeichert hast. Das macht es mit Sicherheit einfacher, Dir Lösungsansätze zu zeigen... -
Ich gehe mal davon aus, dass Du die Geburtstage im datetime-Format vorliegen hast.
Wenn man es MySQL nicht anders mitteilt, gibt es Datumswerte als String im Format 'yyyy-mm-dd' zuück. Du kannst also einen ganz einfachen Stringvergleich vornehmen:
substring(birthday,6,5) > '04-30'
Die obige Abfrage ergibt TRUE für alle Geburtstage ab dem 1. Mai. Wichtig ist allerdings die führende 0 vor der 4. Das kannst Du über PHP mit $feld1, $feld2, $feld3 und $feld4 so ereichen (ich gehe davon aus, dass sie schon vorher von möglichen umschließenden Leerzeichen befreit wurden!):
$startdate=substr("00$feld2", -2).'-'.substr("00$feld1", -2); $enddate=substr("00$feld4", -2).'-'.substr("00$feld3", -2);
Die eigentliche Abfrage und Datenübergabe kann dann so aussehen:
$r=mysql_query("SELECT birthday FROM yourtable WHERE substring(birthday,6,5) >= $startdate AND substring(birthday,6,5) <= $enddate"); $bdays=array(); while ($z=mysql_fetch_assoc($r)) array_push($bdays,$z['birhday']); ...
Beitrag zuletzt geändert: 24.1.2010 14:02:23 von haniwo -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage