Daten nach ein Bestimmte lebensdaur automatisch gelöscht

Henrigo007

Mitglied
Hallo Leute,

ich möchte die Daten nach einem Bestimmten Lebensdauer aus der Tabelle (variants) löschen ich habe dafür den Datensatz ts genannt und als timestamp definiert so sieht das aus,ich weise darauf hin, jede variant hat eine eindeutige id.

ts timestamp
on update CURRENT_TIMESTAMP Nein CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

ich habe das script so implementiert wie unter steht, leider klappt es nicht nach 2 Minuten (120 Sekunden) die daten zu löschen.
PHP:
<?php
require_once __DIR__ . '/connection.php';

$variants_remove='SELECT * FROM variants';

$req = $dbConnect->query($variants_remove);



while ($remove = $req->fetch(PDO::FETCH_ASSOC))
{
    $datum = $remove['ts'];
    $aktuelleDatum = time();
    $differenz = $datum - $erstellungsDatum;
    $lebensdauerInSekunden = 120; 
    if ($differenz > $lebensdauerInSekunden)
    {
    $id = $remove['id'];
    mysql_query('DELETE FROM variants WHERE id='$id'');
    }
}

?>

kann jemandem mir helfen.
Danke im Voraus.
http://localhost/phpmyadmin/tbl_structure.php?db=kantteile&table=variants&token=61730fcaa52ea40a3c09a451d2204abe&goto=tbl_structure.php&back=tbl_structure.php&field=ts&change_column=1
 
Die Zeile $differenz = $datum - $erstellungsDatum; ist falsch. Es müsste $differenz = $aktuellesDatum - $datum; sein, denn $erstellungsDatum hast Du nirgends befüllt.
 
Die Zeile $differenz = $datum - $erstellungsDatum; ist falsch. Es müsste $differenz = $aktuellesDatum - $datum; sein, denn $erstellungsDatum hast Du nirgends befüllt.

ich habe geändert, leider klappt es nicht, ich habe die folgende Daten heute um 08:22:04 und 08:23:23 erzeugt, es sollte eigentlich von meiner Tabelle gelöscht werden

INSERT INTO `variants` ( `a`, `b`, `c`, `d`, `e`, `alpha`, `beta`, `ts`) VALUES
( 123, 120, 56, 500, 448, 900, 789, '2016-09-19 08:22:04'),
( 23, 589, 56, 768, 800, 28, 789, '2016-09-19 08:23:23');


PHP:
<?php
require_once __DIR__ . '/connection.php';
$variants_remove='SELECT * FROM variants';
$req = $dbConnect->query($variants_remove);
while ($remove = $req->fetch(PDO::FETCH_ASSOC))
{
    $datum = $remove['ts'];
    $aktuelleDatum = time();
    $differenz = $aktuelleDatum - $datum;
    $lebensdauerInSekunden = 120;
    if ($differenz > $lebensdauerInSekunden)
    {
    $id = $remove['id'];
    mysql_query('DELETE FROM variants WHERE id='$id'');
    }
}
?>
 
Hi,

bei deinem Script fallen mir gleich mehrere "Unschönheiten" auf:
- Du verwendest die deprecated mysql_* Funktionen. Diese wurden mit PHP 7 entfernt!
- Du führst einen SELECT, und für jeden Treffer einen einzelnen DELETE aus. Das ist äusserst unperformant und kann auch innerhalb einer SQL-Query erledigt werden. Ausserdem selektierst du Daten (*), welche du gar nicht brauchst.
- Du vermischt hier SQL-Timestamp und PHP-time(). time() liefert die Anzahl der Sekunden seit der Unix-Epoch, SQL-Timestamp ist allerdings (quasi) ein String

Schau dir mal die MySQL-Datefunctions an und überlege dir, wie du das Script oben als eine Query (DELETE FROM variants WHERE ts < xxxxxx) abfeuern kannst.

Grüsse,
BK

Als Hint kann ich dir hier die DATE_SUB-Funktion empfehlen.
 
Zuletzt bearbeitet:
Hi,

bei deinem Script fallen mir gleich mehrere "Unschönheiten" auf:
- Du verwendest die deprecated mysql_* Funktionen. Diese wurden mit PHP 7 entfernt!
- Du führst einen SELECT, und für jeden Treffer einen einzelnen DELETE aus. Das ist äusserst unperformant und kann auch innerhalb einer SQL-Query erledigt werden. Ausserdem selektierst du Daten (*), welche du gar nicht brauchst.
- Du vermischt hier SQL-Timestamp und PHP-time(). time() liefert die Anzahl der Sekunden seit der Unix-Epoch, SQL-Timestamp ist allerdings (quasi) ein String

Schau dir mal die MySQL-Datefunctions an und überlege dir, wie du das Script oben als eine Query (DELETE FROM variants WHERE ts < xxxxxx) abfeuern kannst.

Grüsse,
BK

Als Hint kann ich dir hier die DATE_SUB-Funktion empfehlen.

was mache ich denn falsch hier ?

PHP:
<?php
require_once __DIR__ . '/connection.php';

$datum = date('Y-m-d', $daten['ts']);
$variants_remove='DELETE FROM variants  WHERE "$datum" < DATE_SUB(CURRENT_DATE,INTERVAL 2 MINUTE)';
$req = $dbConnect->query($variants_remove);
$daten = $req->fetch(PDO::FETCH_ASSOC);
?>
 
Hallo Henrigo007,

in deinem obigen Code verweist du auf $daten['ts'], welches aber anscheinend nirgends definiert wird.
Dein SQL ist schon fast richtig:
SQL:
DELETE FROM variants  WHERE ts < DATE_SUB(NOW(), INTERVAL 2 MINUTE)

Ich weiss nicht, ob deine "query"-Methode auf deiner Connection das macht, was ich vermute (kann die auch UPDATEs?), aber das
$req->fetch(PDO::FETCH_ASSOC) ist definitiv falsch. Was erwartest du von einem DELETE?

Folgende Seite beschreibt, wie du mit verschiedenen Methoden ein DELETE Statement abschicken kannst:
http://www.w3schools.com/php/php_mysql_delete.asp

Grüsse,
BK
 
Hallo Henrigo007,

in deinem obigen Code verweist du auf $daten['ts'], welches aber anscheinend nirgends definiert wird.
Dein SQL ist schon fast richtig:
SQL:
DELETE FROM variants  WHERE ts < DATE_SUB(NOW(), INTERVAL 2 MINUTE)

Ich weiss nicht, ob deine "query"-Methode auf deiner Connection das macht, was ich vermute (kann die auch UPDATEs?), aber das
$req->fetch(PDO::FETCH_ASSOC) ist definitiv falsch. Was erwartest du von einem DELETE?

Folgende Seite beschreibt, wie du mit verschiedenen Methoden ein DELETE Statement abschicken kannst:
http://www.w3schools.com/php/php_mysql_delete.asp

Grüsse,
BK

auch so klappt es leider nicht

PHP:
<?php
require_once __DIR__ . '/connection.php';

$daten = $_POST['ts'];

$datum = date('Y-m-d', $daten);
$variants_remove='DELETE FROM variants  WHERE "$datum" < DATE_SUB(CURRENT_DATE,INTERVAL 2 MINUTE)';
$req = $dbConnect->query($variants_remove);
$daten = $req->fetch(PDO::FETCH_ASSOC);
?>
 
Zurück