michi262
Goto Top

Datensatz aus Datenbank nach bestimmter Zeit löschen

Hi

da mir die SuFu leider nicht helfen könnte stellt ich euch meine Frage mal:

Also ich habe in meiner Datenbank Daten (kann man sich ja denken, aber egal) nun möchte ich alle Daten die älter als z.B. 5 Tage (120h) sind löschen. Die Datensätze haben eine Tabelle in denen ihr erstellung´s Datum als Zahl z.B. 1216396873 stehen. Nun wollte ich fragen wie ich es machen muss das das programm weiß was älter als 120h ist und löschen soll (wie ich was aus einer DB lösche weiß ich, kenn mich nur nicht mit dem Datum aus).

Hoffe Ihr habt verstanden was ich meine

Gruß
Michi262

Content-ID: 94000

Url: https://administrator.de/contentid/94000

Ausgedruckt am: 16.11.2024 um 05:11 Uhr

kaiand1
kaiand1 08.08.2008 um 21:58:21 Uhr
Goto Top
Lass einen Cronjob alle 6 Std laufen der Prüft ob der Eintrag noch aktuell ist oder in den Trash gehört
oder halt bei jeden Aufruf deiner Seite?!
Michi262
Michi262 08.08.2008 um 23:20:24 Uhr
Goto Top
ich hätte das bei jedem aufruf gemacht. aber ich weiß j anicht wie ich überprüfe wie alt die daten sind. Ich hab mir das so gedacht.

ich dachte mir ich mach das ganze mir ner if anweisung.

$time=time()
$timedb= daten aus der datebank

$conrol = $time - $timedb

if($conrol => 120h)

{
datensatz aus db löschen
}

(das ganze ist natürlich abgekürz nur um euch meine idee zu zeigen)

mein problem ist nur das ich halt ne weiß welches datum welche zahlen reihenfolge ist.
hab z.B. kein plan das 1216396873 ist 18:01:13 18.07

gruß
Michi262
Fritzchen
Fritzchen 09.08.2008 um 18:11:36 Uhr
Goto Top
Hallöchen.

Hm, eine Möglichkeit wäre den gestzten Zeitstempel wieder in ein richtiges Datumsformat zurück zu verwandeln.

Dann so:
date("d.m.Y - H:i:s",$timedb)

$timedb wäre dann hier dein Zeitstempel aus deiner DB

Tschau.
Dani
Dani 09.08.2008 um 22:09:48 Uhr
Goto Top
Hi Michi,
es wäre interessant zu wissen, welche MySQL Version du einsetzte. Denn somit könntest z.B. bei v5 die Neuerung "Trigger" benutzen. Sprich dieser kann bei verschiedenen Events angeschlossen werden. Somit brauchst du keine Cronjob oder sogar per PHP lösen - alles nur mit Arbeit verbunden. ^^

Diese blöde "Zahl" ist die Zeit in Sekunden die seit dem 01.01.1970 vergangen ist. Sprich du Rechnst kurz die 120 Stunden in Sekunden um und gut ist (5*24*60*60). Danach rechnst du die Zeit auf den Timestamp drauf und schaust ob er kleiner oder größer ist wie der Aktuelle - fertig.


Gruss,
Dani
mschatz
mschatz 12.08.2008 um 01:35:42 Uhr
Goto Top
Nochmal hallo Michi262 face-smile

Kurz zur Erklärung: Das Format in deiner Tabelle nennt man UNIX_TIMESTAMP. Diese Zahl gibt die Anzahl der abgelaufenen Sekunden seit dem 01.01.1970, 00:00 Uhr an.

hier mal 2 Beispiele für dich:

mysql_query("DELETE FROM tabelle WHERE datum < '".strtotime('-5 days')."'");  
mysql_query("DELETE FROM tabelle WHERE datum < '".strtotime('-120 hours')."'");  

Gruß,

Markus
Michi262
Michi262 14.08.2008 um 13:18:52 Uhr
Goto Top
hi.
danke für eure hilfe. habs hinbekommen