Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Geburtstagsabfrage

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Geburtstagsabfrage

    Hi,

    ich hänge gerade an folgendem Problem mit einer MySQL Datenbank.

    Es gibt ein Feld "Geburtstag" Type Date

    Ich möchte gerne alle Personen auflisten, die die nächsten 30-40 Tage Geburtstag haben.

    PHP-Code:
    WHERE MONTH(geburtsdatumBETWEEN MONTH(now()) AND MONTH(DATE_ADD(CURDATE(),INTERVAL 1 MONTH)) 
    Hier bekomme ich zwar den aktuellen und den nächsten Monat geliefert, aber ich möchte keinen abgelaufenen Geburtstag angezeigt bekommen.
    Nun stehe ich auf dem Schlauch.
    Hat mir jemand einen Ansatz?


  • #2
    Zitat von kaptainIglo Beitrag anzeigen

    Ich möchte gerne alle Personen auflisten, die die nächsten 30-40 Tage Geburtstag haben.
    Schau einfach, wer in X Tagen älter ist als heute.

    select * from geburtstage where date_part('year', age(datum)) != date_part('year',age(datum + 10));

    für x=10.

    Das für 30 oder 40 Tage anzupassen überlasse ich Dir zur Übung.
    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

    Kommentar


    • #3
      Es gibt date_part aber wieder mal nicht bei MySQL.
      Wenn der TE schon angibt mit MySQL zu arbeiten, darf man schon sinnvoll antworten.

      Nutze anstatt date_part halt YEAR()
      Für age() findet sich sicher auch was, bspw. hier: http://stackoverflow.com/questions/5...n-mysql-innodb
      Competence-Center -> Enjoy the Informatrix
      PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

      Kommentar


      • #4
        Zitat von Arne Drews Beitrag anzeigen
        Es gibt date_part aber wieder mal nicht bei MySQL.
        Hach ja. Wäre einfacher, aufzuzählen, was MySQL kann.

        Wenn der TE schon angibt mit MySQL zu arbeiten, darf man schon sinnvoll antworten.
        Einen Weg aufzuzeigen, der aber noch keine Lösung ist, ist IMHO auch eine sinnvolle Hilfe.

        Nutze anstatt date_part halt YEAR().
        Das ist so natürlich auch nicht richtig, year() erwartet ein DATE, AGE() liefert aber was anderes:

        Code:
        test=*# select age('1966-08-30'::date);
                   age
        --------------------------
         47 years 11 mons 28 days
        (1 row)
        
        Time: 0,194 ms
        test=*# select age('2000-01-01'::date, '1966-08-30'::date);
                  age
        ------------------------
         33 years 4 mons 2 days
        (1 row)
        
        Time: 0,168 ms
        test=*# select date_part('year', age('2000-01-01'::date, '1966-08-30'::date));
         date_part
        -----------
                33
        (1 row)
        Für age() findet sich sicher auch was, bspw. hier:
        Na also, geht doch.
        PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

        Kommentar


        • #5
          PHP-Code:
          SELECT ... WHERE CONCAT(YEAR(NOW()), RIGHT(geburtsdatum,6)) BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 30 DAY
          Das Geburtsdatum muss als DATE Spalte vorliegen.

          Kommentar


          • #6
            Zitat von akretschmer
            Einen Weg aufzuzeigen, der aber noch keine Lösung ist, ist IMHO auch eine sinnvolle Hilfe.
            Hättest Du wie gewohnt erwähnt, daß das, was Du gezeigt hast, wieder mal PostgreSQL ist und nicht bei MySQL funktioniert, wäre das schon hilfreich gewesen, da gebe ich dir recht.
            Es macht halt wenig Sinn, bei Fragen zu PHP mit ner Perl-Lösung ohne weitere Kommentare zu kommen.
            Competence-Center -> Enjoy the Informatrix
            PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

            Kommentar


            • #7
              Zitat von erc Beitrag anzeigen
              PHP-Code:
              SELECT ... WHERE CONCAT(YEAR(NOW()), RIGHT(geburtsdatum,6)) BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 30 DAY
              Das Geburtsdatum muss als DATE Spalte vorliegen.

              Danke. Das ist ein guter Ansatz.

              Kommentar

              Lädt...
              X