Mit MySQL alle Einträge löschen älter 1 Tag

dark_ghost

Erfahrenes Mitglied
Hallo zusammen,

ich stehe im Moment vor eigentlich einem simplen Problem aber ich bekomm den MySQL-Query nicht zusammen.

Ich möchte diesen Query in zusammenhang mit einem Tagescounter verwenden, hier sollen alle Einträge aus der Datenbank gelöscht werden die älter sind als der Heutige Tag.

Beispiel:

Gestern: 20.09.06
Heute: 21.09.06

Jezt sollen die Einträge vom 20.09.06 gelöscht werden.


Über Tipps und Anregungen wie ich das mit einem Mysql-Query lösen kann bin ich dankbar.

Ich denke da an sowas wie:
Code:
mysql_query("DELETE FROM `db` WHERE `datum` älter 1tag");

Vielen Dank
Andreas
 
Hi,

genau diese Doku hab ich mir auch angeschaut und es versucht zu lösen, jedoch kann ichs leider nicht richtig umsetzen.

Ja es ist ein MY-SQL Datumsformat, die Datumsspalte ist vom Typ Date.


Gruß
Andreas
 
Hi,

danke für den Tipp nur funktioniert es so leider nicht.
Ich hab in der Tabelle einen Testdatensatz, bestehend aus id, ip, date

In diesem Fall ist date vom Typ DATE und = 2006-09-20

Jetz sollte der Query ja eigentlich den Datensatz löschen, weil dieser von gestern ist. Dem ist leider nicht so. Hast du / hab ihr noch ne Idee an was das liegen könnte.


Vielen Dank schonmal
Andreas
 
Melmager hat lediglich den falschen Vergleichsoperator beziehungsweise die falsche Reihenfolge gewählt:
Code:
DELETE FROM
        `tabelle`
  WHERE
        TO_DAYS(datum_spalte) < TO_DAYS(NOW())
 
Ahja jetz funktioniert das ganze wunderbar, bin ich gar nicht drauf gekommen den Vergleichsoperator bzw. die Reihenfolge zu ändern.

Vielen Dank euch beiden!
Andreas

p.s. In der Zwischenzeit hatte ich etwas rumprobiert und dabei ist folgender Query entstanden, der komischerweise auch funktioniert:

Code:
mysql_query("DELETE FROM `tabelle` WHERE DATE_SUB(CURDATE(), INTERVAL 1 DAY) >= `date`");

Das Problem dabei ist ich weis gar nich so recht was ich da Programmiert habe, also ich kanns nicht ausformulieren. Eure Lösung ist meinem Verständnis nach sinnig aber diesen Query kann ich nicht formulieren.
Habt ihr mir ne Idee was das genau bedeutet und ob dieser Query sinn macht für so eine Anwendung?!

Vielen Dank.
 
Bei deiner Lösung wird von dem aktuellen Datum („CURDATE()“) ein bestimmtes Zeitintervall („INTERVAL 1 DAY“, also ein Tag) subtrahiert – es stellt also Gestern dar – und mit den Werten der „date“-Spalte verglichen. Dabei werden alle Datensätze, dessen „date“-Spaltenwert kleiner als Gestern ist gelöscht. Damit sind die Abfragen nicht äquivalent.
 

Neue Beiträge

Zurück