MySQL Abfrage: Geburtstage der nächsten 7 Tage

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • MySQL Abfrage: Geburtstage der nächsten 7 Tage

    Hallo,
    ich habe eine MySql Tabelle mit Personen und ihrem Geburtstdatum und möchte auf der Homepage nun die Personen auflisten lassen, die in den nächsten 7 Tagen Geburtstag haben!
    Ich habe bereits alles mit den Datumsfunktionen von MySql probiert (DATE_ADD, TO_DAYS...), aber nichts hilft mir weiter.
    Grund: Die Geburtsdaten liegen als YYYY-MM-DD vor und da diese Personen verschiedene Geburtsjahre haben, kann man schlecht mit
    CURDATE() vergleichen!
    Gibt es sonst einen Weg über PHP? Ich weiß nicht mehr weiter...
    mfg
    Sebastian
    So siehts vorerst aus:
    PHP-Code:
    $Query "SELECT name,vorname,DATE_FORMAT(geburtstag,'%d.%m.') as geburtstag FROM abi_stufe WHERE  order by geburtstag asc";
    if (!(
    $ergebnis mysql_query ($Query$verbindung))) {
        echo(
    "Die Abfrage ist fehlgeschlagen!<P>");
        echo(
    "Ihre Abfrage $Query war nicht erfolgreich!<P>");
        exit();


  • #2
    Hallo Ruderfreund.

    Versuchs doch mal so
    PHP-Code:

    $Query 
    "SELECT name,vorname,DATE_FORMAT(geburtstag,'%d.%m.') as geburtstag FROM abi_stufe WHERE TO_DAYS(CONCAT_WS(\"-\",(YEAR(CURDATE()) + (DAYOFYEAR(geburtstag) < DAYOFYEAR(CURDATE()))), MONTH(geburtstag), DAYOFMONTH(geburtstag))) between TO_DAYS(CURDATE()) and TO_DAYS(CURDATE()) + 7 order by geburtstag"
    Habs nicht probiert, sollte aber so in der Art funktionieren.
    Das Skript baut sich immer den nächsten Geburtstag des Schülers (??) zusammen und macht dann aus diesem Wert mit TO_DAYS den Vergleich auf CURDATE

    Gruss,
    Sigi

    Kommentar


    • #3
      Vielen Dank!
      Nur leider hab ich hier wirklich einen Fehler, aber ich weiß leider nicht wo, da ich einige dieser Befehle nicht kenne
      Funktioniert das auch wenn z.B. der Geburtstag am 1984-05-12 und das heutige Datum 2004-04-29 ist? Das ist ja mein Hauptproblem?
      Kannst du mal durchgucken wo der Fehler ist?

      PHP-Code:
      $Query "SELECT name,vorname,DATE_FORMAT(geburtstag,'%d.%m.') as geburtstag FROM abi_stufe WHERE TO_DAYS(CONCAT_WS(\"-\",(YEAR(CURDATE()) + (DAYOFYEAR(geburtstag) < DAYOFYEAR(CURDATE()))), MONTH(geburtstag), DAYOFMONTH(geburtstag))) between TO_DAYS(CURDATE()) and TO_DAYS(CURDATE()) + 7 order by geburtstag";
      if (!(
      $ergebnis mysql_query ($Query$verbindung))) {
          echo(
      "Die Abfrage ist fehlgeschlagen!<P>");
          echo(
      "Ihre Abfrage $Query war nicht erfolgreich!<P>");
          exit();
      }

      echo
      "<table width=400 align=center>";
      while (
      $zeile mysql_fetch_object ($ergebnis)) { 

      Kommentar


      • #4
        Hallo nochmals,

        Tut mir leid, aber bei mir funktioniert das Script einwandfrei. Zumindest
        die Query, die ich dir gegeben hab. Wenn du die Fehlermeldung etwas
        genauer beschreiben könntest, dann könnt ich dir evtl helfen.

        Mach aus den beiden \" doch mal einfache ' und versuch das mal. Sollte aber auch nichts bringen. Aber ein Versuch ists wert.

        Ansonsten poste die Fehlermeldung. Ich kenn ja auch deine Datenbank nicht. Das Feld geburtstag ist schon eine Datum in der DB??

        Ja, das Script ist unabhängig vom Jahr. Es funktionert also eigentlich
        immer. Auch wenn in der DB 1984 steht.

        Gruss,
        Sigi

        Kommentar


        • #5
          Es ist wirklich sehr komisch!
          Ich finde deine Idee sehr logisch, aber er kann es nicht öffnen! Er braucht ewigkeiten um es zu öffnen und dann kommt Time error!
          Hier mein kleiner Test für das Script:

          PHP-Code:
          <?
          include "connect_to.php";

          $Query = "SELECT name,vorname,DATE_FORMAT(geburtstag,'%d.%m.') as geburtstag FROM abi_stufe WHERE 
          TO_DAYS(CONCAT_WS(\'-\',(YEAR(CURDATE()) + (DAYOFYEAR(geburtstag) < DAYOFYEAR(CURDATE()))), 
          MONTH(geburtstag), DAYOFMONTH(geburtstag))) between TO_DAYS(CURDATE()) and TO_DAYS(CURDATE()) + 7 order by geburtstag";


          if (!($ergebnis = mysql_query ($Query, $verbindung))) {
              echo("Die Abfrage ist fehlgeschlagen!<P>");
              echo("Ihre Abfrage $Query war nicht erfolgreich!<P>");
              exit();
          }


          while ($zeile = mysql_fetch_object ($ergebnis)) {
          echo"$zeile->name";
          }

          ?>
          Hier die Tabelle:

          CREATE TABLE abi_stufe (
          id int(11) NOT NULL auto_increment,
          name mediumtext NOT NULL,
          vorname mediumtext NOT NULL,
          lkfach mediumtext NOT NULL,
          lkfahrt mediumtext NOT NULL,
          mail mediumtext NOT NULL,
          geburtstag date DEFAULT '0000-00-00' NOT NULL,
          foto longtext NOT NULL,
          PRIMARY KEY (id)
          );

          Kommentar


          • #6
            probier mal so:
            PHP-Code:
            ... WHERE 
            (MONTH(geburtstag)=MONTH(CURDATE()) OR 
            MONTH(geburtstag)=MONTH(CURDATE() + INTERVAL 7 DAY)) AND 
            (
            DAYOFMONTH(geburtstag)>=DAYOFMONTH(CURDATE()) OR 
            DAYOFMONTH(geburtstag)<=DAYOFMONTH(CURDATE() +INTERVAL 7 DAY)) 

            Kommentar


            • #7
              Vielen Dank! Das hat fuktioniert... nur die Klammern musste ich noch richtig stellen....

              Hier der funktionierende Code:
              PHP-Code:
              include "connect_to.php";





              $Query "SELECT name,vorname,geburtstag FROM abi_stufe WHERE 
              (MONTH(geburtstag) = MONTH( CURDATE() )  OR 
              MONTH(geburtstag)=MONTH( CURDATE() +INTERVAL 7 DAY ) ) AND
              (DAYOFMONTH(geburtstag)>=DAYOFMONTH( CURDATE() )  OR 
              DAYOFMONTH(geburtstag)<=DAYOFMONTH( CURDATE() +INTERVAL 7 DAY) ) "
              ;

              if (!(
              $ergebnis mysql_query ($Query$verbindung))) {
                  echo(
              "Die Abfrage ist fehlgeschlagen!<P>");
                  echo(
              "Ihre Abfrage $Query war nicht erfolgreich!<P>");
                  exit();

              Kommentar

              Lädt...
              X