kostenloser Webspace werbefrei: lima-city


Geburtstage in bestimmten Zeitraum

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    scweselberg

    scweselberg hat kostenlosen Webspace.

    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?
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 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
  4. 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...
  5. 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
  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!