Datumsgrenzen werden nicht genutzt

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

  • Datumsgrenzen werden nicht genutzt

    Hallo zusammen,

    ich habe mir ein kleines Script gebastelt, das mir alle Gesamtpreise eines Monats ermitteln soll.

    PHP-Code:
    $tage cal_days_in_month(CAL_GREGORIANdate("n"), date("Y"));

    $tag date("j");

    $erster_tag $tag $tag 1;

    if(
    $erster_tag == || $erster_tag == || $erster_tag == || $erster_tag == || $erster_tag == || 
    $erster_tag == || $erster_tag == || $erster_tag == || $erster_tag == 9)
    {
        
    $erster_tag "0" $erster_tag;
    }

    $letzter_tag $erster_tag $tage 1;

    $monat date("m");
    $jahr date("Y");

    $start $erster_tag "." $monat "." $jahr;
    $stop $letzter_tag "." $monat "." $jahr;

    echo 
    $start "<br />";
    echo 
    $stop "<br />";


    $query "SELECT gesamtpreis FROM rechnungen WHERE erstellt_am BETWEEN '".$start."_00:00' AND '".$stop."_23:59'"
    $result mysql_query($query);
    if (!
    $result)
    {
        die (
    'Ungültige Abfrage: ' mysql_error());

    erstellt_am hat folgendes aussehen: 05.11.2008_07:59:28 (z.B.)
    Kontrollausgaben von $start und $stop zeigen die richtigen Datumswerte an.

    Als Ergebnis werden auch Datensätze ausgewählt, die nicht innerhalb der Monatsgrenzen liegen und das ist genau mein Problem, warum ist das so und wie kriege ich das in den Griff ???


    Danke und Gruß

    Michael
    Gruß

    Michael

  • #2
    du weist aber, dass mysql ein anderes datumsformat hat?

    peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar


    • #3
      Das Feld erstellt_am ist ein varchar und wird mit date("d.m.Y_H:i:s") befüllt. Das Datumsformat von mysql wird gar nicht genutzt.
      Gruß

      Michael

      Kommentar


      • #4
        dann kannste schlecht between anwenden, bzw. das Ergebnis dürfte unberechenbar sein

        Warum nimmst du kein DateTime dafür? Was spricht dagegen?

        Kommentar


        • #5
          Wieso dürfte das Ergebnis unberechenbar sein? Ich denke das der query einen Fehler hat. Nur welchen?
          Gruß

          Michael

          Kommentar


          • #6
            Original geschrieben von fritzje610
            Wieso dürfte das Ergebnis unberechenbar sein? Ich denke das der query einen Fehler hat. Nur welchen?
            ganz einfach, der Datentyp ist String, also wird der Vergleich auch stringmäßig durchgeführt und zwar Zeichen für Zeichen, somit ist z.B. 12.03.2008 kleiner als 24.01.2008 ... alles klar?

            Kommentar


            • #7
              Iiiiiihhhhh, dass ist natürlich saudoof. Dann bleibt wohl nur noch das Feldformat auf datetime zu stellen. Aber, wie kann ich dann mit diesem Script zwischen zwei Datumsgrenzen suchen (den Suchstring natürlich entsprechend an das datime-Format angepasst)?
              Gruß

              Michael

              Kommentar


              • #8
                Wenn du den Typ der Spalte nicht ändern kannst/willst, dann musst du den String zerlegen (z.B. mit SUBSTRING) dann mit CAST in DateTime convertieren und erst dann mit Between verwenden, z.B.

                ... WHERE CAST((SUBSTRING(...) + ... + ... SUBSTRING(...)) AS DATETIME) BETWEEN <datetime_start> AND <datetime_end>

                Kommentar


                • #9
                  so wie du es oben gemacht hast. mit between.

                  peter
                  Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                  Meine Seite

                  Kommentar


                  • #10
                    http://dev.mysql.com/doc/refman/5.0/...erator_between
                    http://dev.mysql.com/doc/refman/5.0/...functions.html

                    Kommentar


                    • #11
                      Noch kann ich den Spaltentyp ändern. Erfordert zwar ein bisschen Arbeit, aber gut, ist halt mal so. Ich ändere das mal ab und dann verscuhe ich mal mein Glück mit between. Wenn ich nicht zu Rande komme, melde ich mich nochmal.

                      Vorab schonmal vielen Dank.
                      Gruß

                      Michael

                      Kommentar


                      • #12
                        So, ich habe mal das Feldformat geändert und die Datensätze an das Format angepasst. Den query geändert und siehe da, meine Auswahl der Monatsgrenzen funktioniert.

                        Vielen Dank an euch, ihr seid die Besten.

                        Gruß

                        Michael
                        Gruß

                        Michael

                        Kommentar

                        Lädt...
                        X