Anmelden, um zu folgen  
Folger 0
pl_90

Daten jede X Stunden löschen

13 Beiträge in diesem Thema

Hey..
Ich möchte Daten aus der MySQL jede X Stunden löschen dabei soll das Script erst checken ob ein Datensatz schon X Stunden "lebt" biggrin.gif ... Ich habe bis jetzt so etwas, aber irgendwie funtioniert das nicht, es zeigt mir "OK" aber es wird nichts gelöscht. Es sollte durch time() geschehen, denn das gilt für einen Bestätigungscode der nach X Stunden ablaufen soll. wink.gif

Mein Code ist:

CODE

 $cron_zeit = 24;
 $sekunden = (($cron_zeit-1)*60*60);
 $zeitnow  = time();

 $dbabfr   = mysql_query("SELECT * FROM `TABELLE`");


 while ($dbrow = mysql_fetch_array($dbabfr)) {  

   $minus = floor($zeitnow-$dbrow['TIME']);
   $where = ($sekunden < $minus);

   $delete = mysql_query("DELETE FROM `TABELLE` WHERE TIME = ".$where) or die("Fehler!");

   if ($delete) {
     echo "OK, ".date("d.m.Y, H:i:s")."<br>";
   }  

 }


Ist das überhaupt richtig? kann mir jemand bitte helfen. Danke schön.. smile.gif

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
CODE

$xStunden=5;//alles was älter als 5 Stunden ist
mysql_query("DELETE FROM `TABELLE` WHERE TIME < ".time()-$xStunden*3600);


Ich würde aber eher mit NOW() in sql arbeiten, also:
CODE

//einfügen
mysql_query("Insert INTO table (Date) VALUES (NOW())");
//Date ist dabei z. B. vom Typ Datetime

//löschen
mysql_query("Delete FROM table WHERE Date<DATE_SUB(NOW(),INTERVAL 5 HOUR)");



Severin

edit: kleine Anmerkung zu deinem Code
CODE
  $where = ($sekunden < $minus);

das liefert entweder true oder false zurück

dann wird
CODE
 = ".$where
nie funktionieren
du meinst wahrscheinlich:
CODE
if($sekunden < $minus)
{
  $delete = mysql_query("DELETE FROM `TABELLE` WHERE TIME = ".$dbrow['TIME']) or die("Fehler!");
...

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
QUOTE
WHERE TIME = ".$where


ohne deinen code jetzt im detail nachzuvollziehen, sagt mir mein gefühl das das mit dem "=" nicht richtig sein kann. du willst doch ein "<" ?!

machs einfach:

CODE

DELETE FROM TABELLE WHERE TIME < DATE_ADD(NOW(), INTERVAL -X HOUR);


Für X trägst du die gewünschten Stunden ein.

http://dev.mysql.com/doc/refman/5.1/de/dat...-functions.html

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
QUOTE (Severin Fink @ So 12.08.2007, 14:34)
CODE

$xStunden=5;//alles was älter als 5 Stunden ist
mysql_query("DELETE FROM `TABELLE` WHERE TIME < ".time()-$xStunden*3600);


Ich würde aber eher mit NOW() in sql arbeiten, also:
[...]

Ich nicht, ich möchte i.d.R. die Last vom DB-Server nehmen und so soll er sich nicht mit unnötigen Funktionen abkämpfen, sondern nach Möglichkeit nur stumpf nach Datensätze suchen. Drum würde ich auch nur in sehr wenigen Ausnahmefällen die MD5() Funktion von MySQL nutzen.
Außerdem gibt es teilweise Problembestellungen, die sich besser mit einer Programmiersprache überbrücken lassen als mit einer Datenbankabfrage, welche teilweise erst beim Umzug erhebliche Probleme bereiten können.

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
Wow... Danke Euch beiden! Es hat funktioniert! Danke schön! smile.gif biggrin.gif

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
hm? was hat jetzt md5 damit zu tun? verstehe ich nicht ganz was du meinst..

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
Achso ja...
Wie kann man es jede X Stunden den ^^ Befehl ohne Cronjob ausführen lassen?

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
QUOTE (pl_90 @ So 12.08.2007, 16:37)
hm? was hat jetzt md5 damit zu tun? verstehe ich nicht ganz was du meinst..

Last auf den MySQL-Server für die Erstellung des MD5-Hashes:
CODE
$sql = 'select * from userid = ' . intval($userid) . ' AND password = MD5(' . mysql_real_escape_string($password) .  ')';



Gleiche Funkionalität nur ist hier die Last auf den Webserver:
CODE
$sql = 'select * from userid = ' . intval($userid) . ' AND password = ' . md5($password);



Gleiches gilt bei time() und NOW().



Nur als schlechter Workaround, so dass es nicht automatisch zu der entsprechenden Zeit gestartet wird: einfach als Bild aufrufen (bspw. von einer statischen HTML-Seite) oder bei Seitenaufruf mitausführen lassen (bei einen dynamischen Seite).

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
Achso.. Danke smile.gif
Aber das mit dem Bild will ich irgendwie nicht machen, den wenn eine Seite oft aufgerufen wird, dann das Script auch so oft die Tabelle und das ist noch schlimmeres Last als mit Now() oder so... Gibt es nicht eine andere Methode?

Und wie würdest du das ganze machen, damit der MySQL nicht so ausgelastet wird...?

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
Cronjob oder notfalls wie im Workaround auf eine lokale Datenbankdatei (SQLite, DBM oder DBA) zugreifen, um zu ermitteln, wann der letzte Aufruf des Scriptes war, so wird bei einen Betreib mit mehreren Server eher der Anwendungsserver belastet statt der DB-Server, und das komplette Script nur ausgeführt, wenn die Zeit dazu gekommen ist.

Ich habe aber nicht diese Probleme, dafür habe ich meinen eigenen Server. wink.gif

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
Ich meinte das eigentlich mit dem NOW() und so.. hehe... wink.gif

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
QUOTE (pl_90 @ So 12.08.2007, 23:10)
Ich meinte das eigentlich mit dem NOW() und so.. hehe... wink.gif

Dann weiß ich nicht was Du von mir willst, solange Du Dich in den Punkt nicht klar ausdrückst.

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
Ja, aber wieso nicht einfach Cronjob? Wäre doch das einfachste smile.gif

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
Hi.. Ich weiß, ich hab schon ein Cronjob... wink.gif Ich frag das nur so: Ob es man jede X Stunden irgendwie ausführen könnte, zB durch ein Serverprozess oder so.. wink.gif

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Erstellen Sie einen Account oder melde Sie sich an um kommentieren zu können

You need to be a member in order to leave a comment

Create an account

Registrieren Sie einen neuen Account in unserer Community. Es ist einfach!


Register a new account

Anmelden

Haben Sie bereits einen Account? Dann melden Sie sich hier an.


Jetzt Anmelden
Anmelden, um zu folgen  
Folger 0