Seite 1 von 1
Inhalt nach 3 Tagen aus Datenbank löschen
Verfasst: 20.07.2007, 12:56
von Michael1967
Hallo,
mal eine Frage. Wie lassen sich Inhalte nach Ablauf von 3 Tagen aus der Datenbank löschen?
Ich habe da ein Script, dass automatisch eine Bestätigung verschickt. Der darin enthaltene Link dient der Bestätigung des Eintrags.
Ich muss diese Inhalte (die nicht nach 3 Tagen bestätigt wurden) immer per Hand löschen.
Wie funktioniert sowas in etwa?
Verfasst:
von
SEO Consulting bei
ABAKUS Internet Marketing Erfahrung seit 2002
- persönliche Betreuung
- individuelle Beratung
- kompetente Umsetzung
Jetzt anfragen:
0511 / 300325-0.
Verfasst: 20.07.2007, 13:11
von net(t)worker
hast doch sicher nen Feld mit nem timestamp wann der Eintrag getätigt wurde, oder?
und da dann einfach täglich nen cronjob laufen lassen der die entsprechenden einträge löscht...
Code: Alles auswählen
delete from table where bestaetigt = 0 and zeit_der_eintragung < (now() - (3*24*60*60))
Verfasst: 20.07.2007, 13:16
von Michael1967
Neeee, habisch nicht.
Wie bekomme ich die Zeit zusammen mit dem Eintrag in die Datenbank?
Und lässt sich das dann auch per PHP-Abfrage löschen?
Danke schon mal.
Verfasst: 20.07.2007, 13:35
von net(t)worker
Michael1967 hat geschrieben:Wie bekomme ich die Zeit zusammen mit dem Eintrag in die Datenbank?
insert into table (.........., zeit_der_eintragung) values (........ ,now())
wobei zeit_der_eintragung ein int feld ist... konntest natürlich auch direkt bei der erstellung der Tabelle bestimmen, dass zeit_der_eintragung als defaultwert den aktuellen timestamp bekommt...
wenn du in der benachrichtigungsemail auch den zeitpunkt angeben möchtest bis wann der Bestätigungslink angeklickt werden muss, kannste diesen per time() in php bestimmen und dann weiterverwenden, z.B. mit date() in ein richtiges Datum umwandeln für die email...
Michael1967 hat geschrieben:
Und lässt sich das dann auch per PHP-Abfrage löschen?
nur wenn du per php auf die datenbank zugreifen kannst...
auch bei einem cronjob, müssteste erst über ein script auf die DB zugreifen um die query abzusetzen...
Verfasst: 20.07.2007, 13:43
von Michael1967
Ja vielen Dank. Werde mich mal dransetzen und alles zerstören *gg*
Verfasst: 20.07.2007, 13:51
von Michael1967
Geht das auch, wenn ich das Datum so in die Datenbank schreibe?
Das mit in die Datenbank übertragen - "$datum"
Aber wie muss das dann ausschauen?
delete from table where bestaetigt = 0 and zeit_der_eintragung < (now() - (3*24*60*60))
Verfasst: 20.07.2007, 15:51
von pvdb
wenn du das datum d.m.Y in die db schreibst kannst du damit nicht rechnen. am besten sonst ne spalte vom typ datetime und im insert dann ein NOW() verwenden, dann kannste in der abfrage zum löschen auch mit TIMEDIFF arbeiten.
Verfasst: 20.07.2007, 16:19
von chrizz
wenn du keinen bock auf nen cronjob hast, dann kannst du auch, nen quick&dirty workaround bauen. das script, was die bestätigungsmails verschickt, überprüft die DB auch gleich auf Einträge, die älter als 3 Tage sind und löscht diese. Da kann es dann aber vorkommen, dass dies nicht passiert, weil keiner die Bestätigungsmailsseite aufruft... also am simpelsten wäre nen cronjob...aber man kanns wie gesagt auch in andere dateien verpacken, die öfters aufgerufen werden.
cheers
Verfasst: 20.07.2007, 16:24
von Michael1967
pvdb hat geschrieben:wenn du das datum d.m.Y in die db schreibst kannst du damit nicht rechnen. am besten sonst ne spalte vom typ datetime und im insert dann ein NOW() verwenden, dann kannste in der abfrage zum löschen auch mit TIMEDIFF arbeiten.
Wie wird denn damit gerechnet? Sorry, aber so viel verstehe ich davon noch nicht!
Wie muss ich in die Datenbank schreiben? Und was macht TIMEDIFF?

Verfasst: 20.07.2007, 17:13
von net(t)worker
Verfasst: 20.07.2007, 20:04
von pvdb
hier ein auszug aus einem meiner dateien, wie es sich auch ohne cron lösen lässt:
Code: Alles auswählen
if (rand(0, 50) == 1)
{
$sql = "delete from table_name where TIMEDIFF(NOW() , click) > '24:00:00'";
mysql_query2($sql);
}
quasi, im schnitt bei jedem 50sten aufruf alles aus der tabelle löschen was älter als 24 stunden ist.
die spalte click ist vom typ datetime und wenn ich einen datensatz einfüge, dann bekommt click ein NOW()
am besten legst du dir mal ne testtabelle an oder eine kopie und probierst ein wenig herum, bevor du dich an die original daten wagst
phil