MySQL Datensätze löschen, die älter als 2 Tage sind
Andreas
- php
Hallo!
Wie lösche ich alle Datensätze in eine Tabelle, die älter als 2 Tage sind? Denn wenn ich meinen Warenkorb imme reinfach so lasse, wird die Tabele schnell ziemlich voll und ziemlich langsam. Da ich das mit Sessions realisiere, kann man sowieso nur sofort bestellen, denn wenn man das Browserfenster schließt sind die Daten ja weg(werden die eigenlich dann sofort gelöscht oder kommt man über die SessionID danach noch daran?
Jedenfalls habe ich mir überlegt, das einfachste wäre bei jedem öffnen des Warenkorbs automatisch alle Einträge älter alter als 2 Tage zu löschen, so lösche ich auch kein Daten, wenn jemand über Mitternacht bestellt.
Zusätzlich könnte man noch die Daten nach jeder Bestellung löschen. Aber wie lösche ich denn nach Datum, vor allem "älter als"! Ich würde dann mit jedem EIntrag in den Warenkorb auch das aktuelle Datum mitspeichern und dann per Abfrage alle löschen, die älter als 2 Tage sind.
Wie mache ich das am besten, oder sol ich das besser auf eine andere Art machen???
Gruß Andreas
Hallo!
Wie mache ich das am besten, oder sol ich das besser auf eine andere Art machen???
Schau mal in diese FAQ http://www.koehntopp.de/php/faq-database_mysql.html#database_mysql-11. Dort ist ein Beispiel wie man die Datensaetze der letzten zwei Wochen listet.
Gruss
-> Andreas
Hallo Andreas,
Zusätzlich könnte man noch die Daten nach jeder Bestellung löschen. Aber wie lösche ich denn nach Datum, vor allem "älter als"! Ich würde dann mit jedem EIntrag in den Warenkorb auch das aktuelle Datum mitspeichern und dann per Abfrage alle löschen, die älter als 2 Tage sind.
Wie mache ich das am besten, oder sol ich das besser auf eine andere Art machen???
DELETE FROM warenkorb WHERE UNIX_TIMESTAMP(now()) - UNIX_TIMESTAMP(datum) > 172800
oder mittels
DELETE FROM warenkorb WHERE DAYOFYEAR(now()) - DAYOFYEAR(datum) > 2
wobei man bei letzterer Variante noch den Uebergang zwischen zwei Jahren beruecksichtigen muesste.
MfG, Thomas
Ich schrieb:
DELETE FROM warenkorb WHERE UNIX_TIMESTAMP(now()) - UNIX_TIMESTAMP(datum) > 172800
oder mittels
DELETE FROM warenkorb WHERE DAYOFYEAR(now()) - DAYOFYEAR(datum) > 2
wobei man bei letzterer Variante noch den Uebergang zwischen zwei Jahren beruecksichtigen muesste.
Noch 'ne Variante:
DELETE FROM warenkorb WHERE TO_DAYS((now()) - TO_DAYS(datum) > 2
TO_DAYS() ermittelt die Tage bezogen auf das Jahr 0.
MfG, Thomas
Hi!
Danke, hab die erste Variante genommen, läuft prima!
Gruß
Andreas