Datensätze löschen die älter als 3 Monate sind
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anzahl
bedingung
beitrag
berechnung
date
differenz
funktion
gel
grad
monat
quellen
relativ
schnelle antwort
schnickschnack
sekunde
spalten
tabelle
umweg
vielen dank
-
Hallo erstmal,
ich will aus meiner Tabelle die Datensätze entfernen, die älter als 3 Monate sind. In der Tabelle gibt es eine Spalte "datum" die als Typ "TIMESTAMP" besitzt.
|text| datum |
--------------------------
|blah|2007-10-18 13:48:34|
|blah|2007-09-18 13:48:34|
|blah|2007-05-18 13:48:34|
$sql="DELETE FROM tabelle WHERE ????";
Weiß jemand was man was man als Bedingung hinschreiben muss? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Aha, na wenns keine gibt muss ich es wohl so machen. Aber Aufsplitten muss ich den Timestamp nicht weil man dann auch direkt nur den Monat mit DATE_FORMAT(datum,'%c') abfragen.
Trotzdem danke für die schnelle Antwort! -
Ich habe grad was im Mysql Referenzhandbuch gefunden:
"DATEDIFF() gibt die Anzahl der Tage zwischen dem Startdatum expr und dem Enddatum expr2 zurück. expr und expr2 sind DATE- oder DATETIME-Ausdrücke. Nur die Datumsanteile der Werte werden in der Berechnung verwendet."
Quelle: http://dev.mysql.com/doc/refman/5.1/de/date-and-time-functions.html
Klingt doch gut, wenn die Differenz größer als x Tage ist, wird's gelöscht.
Um den Monat aus dem TIMESTAMP rauszukriegen, gibt es auch noch DAYOFMONTH(date).
"Gibt den Tag im Monat für date zurück. Der Bereich liegt zwischen 0 und 31."
Beitrag geändert: 18.10.2007 14:59:22 von ddanne -
Also das geht so... Es gibt in MySQL die funktion UNIX_TIMESTAMP(), die dir die aktuelle Zeit als Timestamp zurückgibt. Jetzt kannst du ausrechnen, wie viele Sekunden in drei Monaten (also 90 Tagen) sind, das sind nämlich 90*24*60*60=7776000 Sekunden.
Also lautet die Abfrage wie folgt:
DELETE FROM tabelle WHERE datum < ( UNIX_TIMESTAMP() - 7776000 )
Viele Grüße,
ps3web -
Wieso kompliziert wenn es auch einfacher geht? Es gibt dafür sehr schöne funktionen in MySQL.
DELETE FROM tabelle WHERE datum < DATE_SUB(NOW(), INTERVAL 3 MONTH)
-
Ahhh! Vielen Dank, jetzt muss ich es doch nicht so umständlich machen.
-
Ich brauche jetzt woanders einen ähnlichen Code und dort möchte ich alle die Datensätze auslesen, die von heute sind. Und das alles auch wieder aus der selben Tabelle.
Ich habe es auch schon mit folgendem Code probiert, aber es wird nichts ausgegeben.
SELECT id FROM bz WHERE time = DATE_SUB(NOW(), INTERVAL 1 DAY)
Wie muss der Code richtig heißen?
Beitrag geändert: 27.10.2007 18:03:26 von computerfreak1 -
Das ist wieder ganz einfach ;)
SELECT id FROM bz WHERE time = CURDATE()
Das war es schon. Mit CURDATE bekommst du das aktuelle Datum ohne den Zeit Schnickschnack. Time ist bei dir doch ein DateTime oder? Wenn es ein TimeStamp ist müsstest du das bestenfalls erst umwandeln. Zb. so:
SELECT id FROM bz WHERE time = TIMESTAMP(CURDATE())
^^ -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage