[MySQL 4.0] Geburtstage Heute und der letzten Woche anzeigen

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

  • [MySQL 4.0] Geburtstage Heute und der letzten Woche anzeigen

    Hallo,

    ich möchte mich vielmals entschuldigen, das ich wegen meinem Geburtstagsproblem ein neues Thema eröffnet habe. Ich habe auch schon im Forum gesucht und auch was gefunden, aber da standen nie Lösungen in Form von eindeutigen Befehlen drin.

    Das Problem dürfte bekannt sein. Es sollen alle die Datensätze ausgegeben werden, bei denen die Person Heute oder in der letzten Woche Geburtstag hatte.

    $result1 = mysql_query("SELECT Vorname, Name FROM mitglieder WHERE to_days(date_format(Datum,'%d%m')) between to_days(date_format(curdate(),'%d%m')) and to_days(date_format(date_sub(curdate(),interval 7 Day),'%d%m'))")

    So sieht der Query aus.
    Ich habe es bis jetzt mit between Heute und Heute-7Tage versucht.
    Geht das so oder nicht?

    Bitte schreibt mal das ganze richtig aus, damit der nächste mit dem Problem nicht so wie ich dasteht, sondern gleich mal den kompletten Befehl
    hat.

    Vielen Dank im Voraus.

    MfG Simauki

  • #2
    Re: [MySQL 4.0] Geburtstage Heute und der letzten Woche anzeigen

    Original geschrieben von simauki
    Ich habe auch schon im Forum gesucht und auch was gefunden, aber da standen nie Lösungen in Form von eindeutigen Befehlen drin.
    na sowas, sag bloss da standen nur denkansätze, und das denken sollten die frager dann aber noch selbst übernehmen?

    wir sollten uns echt was schämen ...

    Bitte schreibt mal das ganze richtig aus, damit der nächste mit dem Problem nicht so wie ich dasteht, sondern gleich mal den kompletten Befehl hat.
    bitte mach du dir mal klar, dass ein forum dazu da ist, hilfe zur selbsthilfe zu geben, und nicht, um anderen leuten ihre komplette arbeit abzunehmen.

    wenn du auf letzteres aus bist, dann sag bescheid, dann verschieben wir dich nach projekthilfe oder jobangebote.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      warum to_days?
      warum %d%m und nicht %m%d?
      Ich denke, also bin ich. - Einige sind trotzdem...

      Kommentar


      • #4
        Wenn man die letzten 3 Stunden nur an diesem einem Query gesessen hat, verrennt man sich schon mal in einen vermeintlichen Lösungsansatz. Und bevor ich noch die nächsten 3 Stunden weiter auf der gleichen Stelle rumtrette, dachte ich hole ich mir mal etwas Hilfe. Also nichts für ungut, mir reichen auch bloß Aussagen, wie to_Days funktioniert nicht mit date_format oder so in der Art.

        MfG Simauki

        Kommentar


        • #5
          @mrhappiness

          Ich versuche es mit to_days, weil ich das in Eurer Forumssuche in einem Thread als einen "Denkansatz" gefunden hab.

          Wenn nicht mit to_days wie dann?

          @wahsaga

          Siehst Du, MrHappiness fragt "Wieso mit to_days?". Denkansätze funktionieren also doch nicht immer so wie man denkt.




          MfG Simauki

          Kommentar


          • #6
            mit to_days wird's wahrscheinlich auch gehen, aber das is doch überflüssig denke ich

            aber als kleiner denkanstoß:
            heute ist der 02.03.2004

            du suchst allso leute, die zwischen 24.02.2004 und 02.03.2004 geburtstag haben

            du suchst alles zwischen 20040302 - INTERVAL 7 DAY und 20040302 und solltest doch damit deinen zeitraum abgedeckt haben oder?
            mit dieser art des datums (%y%m%d) sollte es gehen, vorausgesetzt du setzt die grenzen bei between richtig (erst die kleinere, dann die größere)

            und ganz vielleicht geht's ja auch völlig ohne die formatierung des datums sondern rein mit INTERVAL

            ---
            das to_days, dass du gefunden hast, wurde da genutzt um das alter einer person auszurechnen afair, für dein problem ist es nichtnotwendig, obwohl es damit auch gehen würde (denke ich)
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              Es funktioniert. Für alle die auch irgendwann mal vor dem Prpblem stehen, füge ich mal den Query mit ein:

              $result1 = mysql_query("SELECT Vorname, Name, year(Datum) FROM mitglieder WHERE date_format(Datum,'%m%d') between date_format(date_sub(curdate(),interval 7 day),'%m%d') and date_format(curdate(),'%m%d')")

              Durch die Datums-Formatierung %m%d werden alle Geburtstage ausgegeben, die in diesem Intervall liegen. Mit %Y%m%d oder ganz ohne Datums-Formatierung nur die, die in diesem Jahr in diesem Intervall geboren wurden, also Babys.

              Danke nochmals.

              MfG Simauki

              Kommentar


              • #8
                Hallo,

                ich habe mich gerade auch mit diesem Thema beschäfitgt und muss sagen, das diese Query IMO nur bedingt funktioniert, DENN:

                Gibt es einen Jahreswechsel kann es vorkommen, das BETWEEN 1 größer* wird als BETWEEN 2 und dann werden keine Datensätze gefunden, die in der letzten Kalenderwoche eines Jahres liegen.

                *z.B. Kalenderwoche 1 - 2009 geht vom 29.12.2008 bis 04.01.2009 - das würde für die Bedingung bedeuten, er soll nach Datensätzen suchen, die zwischen 1229 und 0401 liegen.

                Sehe ich das richtige oder hab ich da nen Denkfehler ?

                Gruss
                Paddy

                Kommentar


                • #9
                  Hallo, keine Ahnung. Ich muß das mal bei Gelegenheit testen. MfG Simauki

                  Kommentar


                  • #10
                    Hallo paddy
                    Seh' ich auch so.
                    Der date_format nach Monat und Tag ohne Jahr ist der Übeltäter.
                    Und er ist unnötig.
                    Nur to_days(curdate()) bzw. to_days(curdate())-7 reicht IMO auch,
                    er gibt einen Integer in Tagen seit dem Jahr 0 zurück.

                    Kommentar


                    • #11
                      Original geschrieben von mrhappiness
                      [...]mit dieser art des datums (%y%m%d) sollte es gehen[...]
                      simauki, wo hast Du das Jahr gelassen

                      Kommentar


                      • #12
                        hmm, also mit TO_DAYS funktioniert es IMO auch nicht wirklich ohne zu tricksen, DENN:

                        Geburtstag 1 am 30.12.2008 (Dienstag)
                        Geburtstag 2 am 01.01.2009 (Donnerstag)

                        Geburtstag 1 und 2 sind innerhalb einer Woche.

                        $last_weekday ist der letzte mit PHP errechnete Tag der Woche, in diesem Fall also 2009-01-04.

                        Bei
                        PHP-Code:
                        $geb_query_3  "SELECT id, geb_name, year(geb_datum) FROM termin_gburtstage WHERE to_days(DATE_FORMAT(geb_datum,'".$jahreszahl."-%m-%d')) ";
                        $geb_query_3 .= "between to_days(date_sub('".$last_weekday."', INTERVAL 6 DAY)) AND to_days('".$last_weekday."')"
                        Da gibts ein Problem in der WHERE-Bedinung
                        PHP-Code:
                        WHERE to_days(DATE_FORMAT(geb_datum,'".$JAHRESZAHL."'-.... 
                        Die Jahreszahl ist in dieser Woche aber 2008 und 2009.

                        Hat jemand einen anderen Lösungsansatz ?
                        Zuletzt geändert von ; 18.05.2006, 14:53.

                        Kommentar


                        • #13
                          Hallo paddy
                          Unter Woche wurde bisher verstanden: "in den letzten 7 Tagen".
                          Du sprichst jetzt wohl von der Kalenderwoche.

                          Dann nimm doch YEARWEEK:

                          2003-12-31 -> 200352
                          2004-01-01 -> 200352

                          Kommentar


                          • #14
                            So, okay - also nachdem ich nun den halben Tag daran verbracht habe, das Problem, Geburtstage einer Kalenderwoche korrekt auslesen zu können, verbracht habe, bin ich überzeugt davon, das ich entweder nen Schaden habe oder aber ein Bug sein unwesen treibt - DENN:

                            31.12.2008 ist ein Mittwoch
                            01.01.2009 ist ein Donnerstag der gleichen Woche

                            PHP-Code:
                            $geb_query_4 mysql_query("SELECT WEEK('2008-12-31',1) AS d1");
                            $geb_result_4 mysql_result($geb_query_4,0);
                            $geb_query_5 mysql_query("SELECT WEEK('2009-01-01',1) AS d1");
                            $geb_result_5 mysql_result($geb_query_5,0);
                            print (
                            "PHP am 31.12.2008:".date("W",mktime(0,0,0,12,31,2008))."<br>");
                            print (
                            "MySQL am 31.12.2008:".$geb_result_4."<br>");
                            print (
                            "PHP am 1.1.2009:".date("W",mktime(0,0,0,1,1,2009))."<br>");
                            print (
                            "MySQL am 1.1.2009:".$geb_result_5."<br>"); 
                            Ergebnis:
                            PHP am 31.12.2008:1
                            MySQL am 31.12.2008:[COLOR=red]53[/COLOR]
                            PHP am 1.1.2009:1
                            MySQL am 1.1.2009:1
                            Erklärung laut MySQL FAQ:
                            Mit einem einzelnen Argument gibt diese Funktion die Woche für datum im Bereich 0 bis 53 zurück (ja, es kann Anfänge der Woche 53 geben), für Orte, in denen Sonntag der erste Wochentag ist. In der Form mit zwei Argumenten gestattet WEEK() es, festzulegen, ob die Woche am Sonntag oder am Montag beginnt. Die Woche beginnt am Sonntag, wenn das zweite Argument 0 ist, und am Montag, wenn das zweite Argument 1 ist..
                            Zuletzt geändert von ; 18.05.2006, 21:11.

                            Kommentar


                            • #15
                              Mein Problem ist nun, kann ich Geburtstage auslesen, die sowohl in der letzten als auch in der ersten KW des neuen Jahres liegen ?

                              Also
                              Mittwoch, 31.12.2008 --> Geburtstag Mutti (in der DB: 31.12.1956)
                              Donnerstag, 01.01.2009 --> Geburtstag Vati (in der DB 01.01.1952)

                              $jahreszahl == $_GET-übergebene VAR des aktuell gewählten Jahres des Kalenders
                              $last_weekday == mit PHP errechneter letzter Tag der Woche

                              PHP-Code:
                              $geb_query_3  "SELECT id, geb_name, year(geb_datum) FROM termin_gburtstage WHERE YEARWEEK(DATE_FORMAT(geb_datum,'".$jahreszahl."-%m-%d'),1) ";
                              $geb_query_3 .= "= YEARWEEK('".$last_weekday."',1)"
                              Problem ist, wenn ich von 12.2008 auf 01.2009 blättere, dann ändert sich $jahreszahl natürlich und die Query stimmt natürlich nicht mehr, da er dann nach 31.12.2009 anstatt nach 31.12.2008 sucht und andersrum. Hmm.... vielleicht jemand eine Idee, wie man das einfach und sicher lösen könnte ?

                              Kommentar

                              Lädt...
                              X