Einträge, die älter als 2 Tage sind aus einer Datenbank löschen

Claas M

Erfahrenes Mitglied
Hi.

An sich ist es kein Problem, weil ich immer ein Datum mit in die DB schreibe und von daher nur das aktuelle Datum nehmen und 2 subtrahieren muss.

Wie verhält es sich aber, wenn ich den ersten eines Monats habe und nicht sagen kann, obs ein 30. oder 31. geschweige denn 28. (29.) ist.

Also an sich das kein Problem, weil ich auch noch den Monat passend speichere.

Und die Funktion mktime() ist denke ich mal auch nicht der richtige Ansatz.

Wäre toll, wenn mir einer helfen lönnte.

Gruß Claas
 
Wenn du nen timestamp hast, z.B. durch UNIX_TIMESTAMP(datumsspalte),
kannst du damit arbeiten.
PHP:
$zwei_tage = 60*60*24*2;
$vorgestern = $db_stamp - $zwei_tage;
echo(date("d.m.Y",$vorgestern));
 
:rolleyes: danke Diene schnelle Antwort:) Timestamps hatte ich auch aber der Counter war micr zu kompliziert und zu doof, weil er nur die letzten 24 Stunden ausgegeben hat.

Aber ich versuchs mal.

Danke
 
Achso, ich les gerade es geht ums löschen von Datensätzen.
PHP:
mysql_query('DELETE FROM tabelle WHERE UNIX_TIMESTAMP(spalte)<'.(time()-60*60*24*2).';');
 
Jörg Rißmann hat gesagt.:
Achso, ich les gerade es geht ums löschen von Datensätzen.
PHP:
mysql_query('DELETE FROM tabelle WHERE UNIX_TIMESTAMP(spalte)<'.(time()-60*60*24*2).';');

Hm also ich habe ne Spalte, über die Timestamps mittels time() eingetragen werden.
Ich möchte, dass beim ersten Aufruf der Seite alle Einträge die älter als 2 Tage sind, gelöscht werden, was ich durch timestamps denke ich mal nciht erreichen kann, weil es ja auch welche gibt, die gerade mal 25 Stunden alt sind oder sehe ich das falsch?

/also egal ob am 12 um 00.00.01 uhr oder um 23.59.59 und das geht so ja nicht mittels timestamp, weil dann ja die Jetzige Zeit genommen wird, oder?
 
Zuletzt bearbeitet:
Claas Meckelnburg hat gesagt.:
, weil es ja auch welche gibt, die gerade mal 25 Stunden alt sind oder sehe ich das falsch?
hab ich nicht verstanden. :-D

Claas Meckelnburg hat gesagt.:
Hm also ich habe ne Spalte, über die Timestamps mittels time() eingetragen werden.

PHP:
 mysql_query('DELETE FROM tabelle WHERE time_spalte<'.(time()-60*60*24*2).';');
Das löscht alle Tupel, die älter sind als 60*60*24*2 Sekunden, also 2 Tage.
 
So wie ich es verstehe löscht Deine Version alle Einträge von vor 10 Uhr, wenn ich das Script um 10 Uhr aufrufe. Ich hätte aber gerne, dass alle Nachfolgenden auch noch gelöscht werden, sofern sie noch am selben Tag eingetragen worden sind ;)

Dafür mache ich es mittels date("j"), was soweit klappen sollte nur hänge ich an einer lösung für 28 (29), 30 und 31 ;)

Den monat kann man da ja nicht nehmen, weil dann z.B. nicht nur der 30. sondern auch der 31. gelöscht wird. Aber woher weiß das script, ob der Monat 31 oder 30 Tage hat.

So, nun verständlicher ;)
 
probiere mal das.

PHP:
$time=time()-60*60*24*2;
$time2=time()-60*60*24;
$start=mktime(0,0,0,date("m",$time),date("d",$time),date("y",$time));
$ende=mktime(23,59,59,date("m",$time2),date("d",$time2),date("y",$time2)) 

mysql_query("DELETE FROM tabelle WHERE time_spalte>$start AND time_spalte<$ende");
 
PHP:
$time=time()-60*60*24*2;
$time2=time()-60*60*24;

Hier wird die jetzige Zeit vor einem und vor zwei Tagen berechnet, oder?

PHP:
$start=mktime(0,0,0,date("m",$time),date("d",$time),date("y",$time));
$ende=mktime(23,59,59,date("m",$time2),date("d",$time2),date("y",$time2))

Was wird hier gemacht? Es wird ein Tag berechnet aber wieso mit mdy? Was bedeutet denn das $time dazwischen?

PHP:
mysql_query("DELETE FROM tabelle WHERE time_spalte>$start AND time_spalte<$ende");

Ok, das ist klar ;)

/e

Kann ich nicht einfach mittels mktime() am ersten eines Monats den Tag davor berechnen (und den 2. davor), damit ich die über die Tage ansprechen kann? weil dann ist es um einiges leichter...

Gruß Claas
 
Zuletzt bearbeitet:
Sorry wegen Doppelposts aber
PHP:
echo date("j", time()-60*60*24*2);
scheint das zu ergeben, was ich brauche... :)

/e
PHP:
function delete()
	{
		$yesterday =  date("j", time()-60*60*24*2);
		mysql_query("DELETE FROM `counter_ip` WHERE `day` <= '".$yesterday."'");
	}

Also testweise wurde der 13te korrekt gelöscht *freu* muss nurncohmal sehen, wie es sich bei Monatswechseln verhält.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück