Knoppers: mysql /php4: Alte Warenkorbeinträge aus DB autom. löschen?

Guten Morgen Deutschland,

Meine Warenkorbeinträge haben zwar alle einen Timestamp, aber ich weiß nicht wie ich Einträge, die ein bestimmten Wert überschritten habe automatisch löschen kann.
Hat jemand erfahrungen damit oder macht man das immer manuell?

Danke,

Knoppers

  1. Moin Knoppers,

    Guten Morgen Deutschland,

    es ist doch noch gar nicht halb zehn ;)

    Meine Warenkorbeinträge haben zwar alle einen Timestamp, aber ich weiß nicht wie ich Einträge, die ein bestimmten Wert überschritten habe automatisch löschen kann.
    Hat jemand erfahrungen damit oder macht man das immer manuell?

    normalerweise kannst du Datumswerte mit Vergleichsoperatoren behandeln. Du könntest also -abstrakt formuliert- etwas schreiben wie "DELETE FROM tabelle WHERE timestamp < deinwert". Aber das solltest Du vielleicht erst mal mit einem harmlosen SELECT ausprobieren ;-]

    viele Grüße
      Achim -derheuteleiderkeinknoppersdabeihat- Schrepfer

    --
    »Wenn die meisten sich schon armseliger Kleider und Möbel schämen, wieviel mehr sollten wir uns da erst armseliger Ideen und Weltanschauungen schämen.« - Albert Einstein
    1. Guten Morgen!

      es ist doch noch gar nicht halb zehn ;)

      Noch nicht aber gleich. Und dann gibt es Frühstückchen! :-)

      normalerweise kannst du Datumswerte mit Vergleichsoperatoren behandeln. Du könntest also -abstrakt formuliert- etwas schreiben wie "DELETE FROM tabelle WHERE timestamp < deinwert". Aber das solltest Du vielleicht erst mal mit einem harmlosen SELECT ausprobieren ;-]

      Jo, dass das so geht dachte ich mir schon nur das Problem ist das Einträge die VON HEUTE aäter als sagen wir 2 Wochen sind gelöscht werden sollen. Der heutige Tag muss ja irgenwie in das Timestamp format knovertiert werden und das raff ich nicht,

      Danke,

      ich wünsche Dir viele leckere Knoppers dieses jahr meine Freund!
      :-)

      1. Hallo,

        Jo, dass das so geht dachte ich mir schon nur das Problem ist das Einträge die VON HEUTE aäter als sagen wir 2 Wochen sind gelöscht werden sollen. Der heutige Tag muss ja irgenwie in das Timestamp format knovertiert werden und das raff ich nicht,

        DELETE FROM warenkorb WHERE UNIX_TIMESTAMP(now())-UNIX_TIMESTAMP(datetime_des_eintrages)>1209600

        MfG, Thomas

        1. Hi Thomas

          DELETE FROM warenkorb WHERE UNIX_TIMESTAMP(now())-UNIX_TIMESTAMP(datetime_des_eintrages)>1209600

          Hört sich fast gut an. 2 Wochen gleich 1209600 Sekunden, aber was gebe ich bei datetime_des_eintrages an?

          Vielen Dank.

          Knoppers.
          Auch Dir viele leckere Knoppers!

          1. Hallo,

            Hört sich fast gut an. 2 Wochen gleich 1209600 Sekunden, aber was gebe ich bei datetime_des_eintrages an?

            Im Warenkorb wird ein Feld (DATETIME) definiert, welches den Zeitpunkt [now()] des jeweiligen Eintrages festhaelt.

            Hier mal der Auszug des Warenkorbinhaltes aus einem Demo-Beispiel http://www.datenverdrahten.de/iproshop/:

            UID                                PID    ANZ   DATUMZEIT
            c8bb443ed0347bbefe0ea69dae1559ff   P006   3     2003-01-14 10:35:52
            c8bb443ed0347bbefe0ea69dae1559ff   P002   2     2003-01-14 10:35:51

            Es werden eine User-ID (UID=Session-ID), die Produkt-ID (PID), die Anzahl des Produktes (ANZ) sowie der Zeitpunkt gespeichert.

            Beim Laden der Startseite werden in meinem Beispiel alle Eintraege geloescht, die aelter als 24 Stunden sind:

            DELETE FROM warenkorb WHERE UNIX_TIMESTAMP(now())-UNIX_TIMESTAMP(DATUMZEIT)>86400

            MfG, Thomas

            1. Hi Thomas,

              Danke für die nette Hilfe. Ich verstehe wie es bei Dir funktioniert.
              Ich habe aber 2 Tabellen in denen die Session ID auftaucht. Einmal "besucher" und "warenkorb".
              Nun habe ich folgendes zu Testzwecken geschrieben:

              $wkLife=1; // Warenkorb Lebenszeit

              $sql = "SELECT *
                        FROM warenkorb wa, besucher be
                 WHERE (be.(UNIX_TIMESTAMP(now())- be.UNIX_TIMESTAMP(zeit)) >'".$wkLife*3600*24 ."'
                    OR ((wa.UNIX_TIMESTAMP(now())- wa.UNIX_TIMESTAMP(date)) >'".$wkLife*3600*24 ."'";

              $result = mysql_query($sql,$dbConnection);
              while ($row = mysql_fetch_array($result))
              {
                echo $row['date'];
                echo $row['zeit'];
              }

              Die Zeit wird in beiden Tabellen so abgespeichert:

              20021115150418

              Bin noch Anfänger auf diesem Gebiet.
              Wo liegt das Problem?
              Danke

              1. Hallo,

                Wo liegt das Problem?

                Die Sekundenzahl ist numerisch, also nicht in '...' uebergeben.

                MfG, Thomas

                1. Habe den Code mittleweile abgeändert:

                  $wkLife = $wkLife*3600*24;

                  $sql = "Delete *
                            FROM warenkorb wa, besucher be
                     WHERE (UNIX_TIMESTAMP(now())- UNIX_TIMESTAMP(be.zeit)) >".$wkLife."
                        OR (UNIX_TIMESTAMP(now())- UNIX_TIMESTAMP(wa.date)) >".$wkLife;

                  $result = mysql_query($sql,$dbConnection);

                  Es wird nicht eine zeile gelöscht!
                  :-(