Lästige Datumsfunktionen ;)

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

  • Lästige Datumsfunktionen ;)

    Hallo,
    vorweg: ich habe die Suche benutzt. Obwohl ich mir sicher bin, dass das Thema schon 1000 mal durchgekaut wurde, habe ich nichts passendes gefunden.


    Ich möchte einfach alle Daten ausgegeben bekommen, bei denen der Status vor mehr als 7 Tagen geändert wurde. (und noch ein paar Kriterien, die hier aber nicht relevant sind!)

    Mein ansatz...
    PHP-Code:
    $datum getdate();
            
    //$datum = $datum . " 23:59:59";
            
    $sql "SELECT * FROM orders WHERE orders_status=11 AND payment_method='Rechnung' AND date_purchased < " $datum-" ORDER BY date_purchased"
    ...funktioniert natürlich noch nicht.

    Format in der Datenbank: "2006-07-06 12:13:59"

    Kann mir da mal jemand helfen? An besten kurz so ändern, dass es funktioniert.

    Gruß,
    Gomilli

  • #2
    Vollständige Theorie:

    Die sql-Funktion heisst DATE_ADD oder DATE_SUB.
    [edit: Die Dokumentation ist unter der Funktion DATE_ADD.]
    Man kann auch + und - verwenden.
    Der Operand heisst INTERVAL 7 DAYS.
    Die Vergleichsoperanden für Datumwerte sind die gewöhnlichen.
    das $datum wird im sql-Befehl als sql-String geschrieben, deshalb '$datum'.
    Ebenso kann um Zahlen '...' verwendet werden, ausser im LIMIT-Teil.

    Praktisch:

    $sql = "SELECT * FROM orders WHERE orders_status=11 AND payment_method='Rechnung'
    AND date_purchased < " . $datum-7
    . " ORDER BY date_purchased";

    $sql = "SELECT * FROM orders WHERE orders_status='11' AND payment_method='Rechnung'
    AND date_purchased < '$datum' - INTERVAL 7 DAYS
    ORDER BY date_purchased";
    Zuletzt geändert von gleiwitz19; 01.08.2006, 15:50.

    Kommentar


    • #3
      -
      Zuletzt geändert von gleiwitz19; 01.08.2006, 15:48.

      Kommentar


      • #4
        ich sehe gerade, das Datumsformat hast Du angeschnitten. Deshalb:
        in php bekommst Du das Datum im sql- Format mit date('Y-m-d').
        in sql bekommst Du das Datum ohne die Zeit mit der sql-Funktion DATE().

        somit ergibt sich.
        $datum = date('Y-m-d');

        $sql = "SELECT * FROM orders WHERE orders_status='11' AND payment_method='Rechnung'
        AND DATE(date_purchased) < '$datum' - INTERVAL 7 DAYS
        ORDER BY date_purchased";

        Kommentar


        • #5
          Ich versuchs mal...mom

          Kommentar


          • #6
            Habe es mal mit der Zeit hintendran versucht, aber auch ohne...geht noch nicht.

            $datum = date('Y-m-d');
            $datum = $datum . " 23:59:59";
            $sql = "SELECT * FROM orders WHERE orders_status='11' AND payment_method='Rechnung'
            AND DATE(date_purchased) < '$datum' - INTERVAL 7 DAYS
            ORDER BY date_purchased";

            Fehlermeldung:
            Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in xxx/status.php on line 57

            Also das übliche. Noch eine Idee?

            edit: mit interval natürlich!

            Kommentar


            • #7
              Original geschrieben von Gomilli
              Also das übliche. Noch eine Idee?

              die übliche:
              echo $sql;
              echo mysql_error();

              Kommentar


              • #8
                echo mysql_error();

                Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                Wie man Fragen richtig stellt

                Kommentar


                • #9
                  ich glaube es ist INTERVAL 7 DAY bzw habe es nochmals so nachgeschaut.

                  Kommentar


                  • #10
                    You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(date_purchased) < '2006-08-01' - INTERVAL 7 DAY ORDER BY da

                    Kommentar


                    • #11
                      man benutze die Funktion DATE_ADD oder DATE_SUB, je nach bedarf ... und klatscht da nicht einfach Konstanten in den Query _-_

                      Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                      bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                      Wie man Fragen richtig stellt

                      Kommentar


                      • #12
                        Es wäre gut, auch echo $sql; zu haben.
                        Zuletzt geändert von gleiwitz19; 01.08.2006, 18:32.

                        Kommentar


                        • #13
                          folgende query geht bei mir, auf den Abstand bei DATE kommt auch nichts an (mysql 5.0.18).

                          php:
                          $datum=date('Y-m-d');
                          $sql="SELECT * FROM xxxx WHERE id='1' AND id='1'
                          AND DATE(datum) < '$datum' - INTERVAL 7 DAY
                          ORDER BY datum";

                          sql (echo $sql; )
                          SELECT * FROM xxxx WHERE id='1' AND id='1'
                          AND DATE(datum) < '2006-08-01' - INTERVAL 7 DAY ORDER BY datum
                          Zuletzt geändert von gleiwitz19; 01.08.2006, 18:33.

                          Kommentar


                          • #14
                            Original geschrieben von gleiwitz19
                            folgende query geht bei mir, auf den Abstand bei DATE kommt auch nichts an (mysql 5.0.18).
                            sieht sehr komisch aus...

                            so macht man es eigentlich
                            $sql = "SELECT * FROM tabelle WHERE DATE(datum) < DATE_SUB('" . $datum . "', INTERVAL 7 DAY)"


                            okay, funktioniert auch nur mit +/-
                            As of MySQL 3.23, date arithmetic also can be performed using INTERVAL together with the + or - operator:

                            date + INTERVAL expr unit
                            date - INTERVAL expr unit
                            d.h. irgendwas anderes ist kaputt ^^,
                            Zuletzt geändert von ghostgambler; 01.08.2006, 18:43.

                            Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                            bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                            Wie man Fragen richtig stellt

                            Kommentar

                            Lädt...
                            X