mysql /php4: Alte Warenkorbeinträge aus DB autom. löschen?
Knoppers
- datenbank
0 Achim Schrepfer0 Knoppers0 Thomas Meinike0 Knoppers
Guten Morgen Deutschland,
Meine Warenkorbeinträge haben zwar alle einen Timestamp, aber ich weiß nicht wie ich Einträge, die ein bestimmten Wert überschritten habe automatisch löschen kann.
Hat jemand erfahrungen damit oder macht man das immer manuell?
Danke,
Knoppers
Moin Knoppers,
Guten Morgen Deutschland,
es ist doch noch gar nicht halb zehn ;)
Meine Warenkorbeinträge haben zwar alle einen Timestamp, aber ich weiß nicht wie ich Einträge, die ein bestimmten Wert überschritten habe automatisch löschen kann.
Hat jemand erfahrungen damit oder macht man das immer manuell?
normalerweise kannst du Datumswerte mit Vergleichsoperatoren behandeln. Du könntest also -abstrakt formuliert- etwas schreiben wie "DELETE FROM tabelle WHERE timestamp < deinwert". Aber das solltest Du vielleicht erst mal mit einem harmlosen SELECT ausprobieren ;-]
viele Grüße
Achim -derheuteleiderkeinknoppersdabeihat- Schrepfer
Guten Morgen!
es ist doch noch gar nicht halb zehn ;)
Noch nicht aber gleich. Und dann gibt es Frühstückchen! :-)
normalerweise kannst du Datumswerte mit Vergleichsoperatoren behandeln. Du könntest also -abstrakt formuliert- etwas schreiben wie "DELETE FROM tabelle WHERE timestamp < deinwert". Aber das solltest Du vielleicht erst mal mit einem harmlosen SELECT ausprobieren ;-]
Jo, dass das so geht dachte ich mir schon nur das Problem ist das Einträge die VON HEUTE aäter als sagen wir 2 Wochen sind gelöscht werden sollen. Der heutige Tag muss ja irgenwie in das Timestamp format knovertiert werden und das raff ich nicht,
Danke,
ich wünsche Dir viele leckere Knoppers dieses jahr meine Freund!
:-)
Hallo,
Jo, dass das so geht dachte ich mir schon nur das Problem ist das Einträge die VON HEUTE aäter als sagen wir 2 Wochen sind gelöscht werden sollen. Der heutige Tag muss ja irgenwie in das Timestamp format knovertiert werden und das raff ich nicht,
DELETE FROM warenkorb WHERE UNIX_TIMESTAMP(now())-UNIX_TIMESTAMP(datetime_des_eintrages)>1209600
MfG, Thomas
Hi Thomas
DELETE FROM warenkorb WHERE UNIX_TIMESTAMP(now())-UNIX_TIMESTAMP(datetime_des_eintrages)>1209600
Hört sich fast gut an. 2 Wochen gleich 1209600 Sekunden, aber was gebe ich bei datetime_des_eintrages an?
Vielen Dank.
Knoppers.
Auch Dir viele leckere Knoppers!
Hallo,
Hört sich fast gut an. 2 Wochen gleich 1209600 Sekunden, aber was gebe ich bei datetime_des_eintrages an?
Im Warenkorb wird ein Feld (DATETIME) definiert, welches den Zeitpunkt [now()] des jeweiligen Eintrages festhaelt.
Hier mal der Auszug des Warenkorbinhaltes aus einem Demo-Beispiel http://www.datenverdrahten.de/iproshop/:
UID PID ANZ DATUMZEIT
c8bb443ed0347bbefe0ea69dae1559ff P006 3 2003-01-14 10:35:52
c8bb443ed0347bbefe0ea69dae1559ff P002 2 2003-01-14 10:35:51
Es werden eine User-ID (UID=Session-ID), die Produkt-ID (PID), die Anzahl des Produktes (ANZ) sowie der Zeitpunkt gespeichert.
Beim Laden der Startseite werden in meinem Beispiel alle Eintraege geloescht, die aelter als 24 Stunden sind:
DELETE FROM warenkorb WHERE UNIX_TIMESTAMP(now())-UNIX_TIMESTAMP(DATUMZEIT)>86400
MfG, Thomas
Hi Thomas,
Danke für die nette Hilfe. Ich verstehe wie es bei Dir funktioniert.
Ich habe aber 2 Tabellen in denen die Session ID auftaucht. Einmal "besucher" und "warenkorb".
Nun habe ich folgendes zu Testzwecken geschrieben:
$wkLife=1; // Warenkorb Lebenszeit
$sql = "SELECT *
FROM warenkorb wa, besucher be
WHERE (be.(UNIX_TIMESTAMP(now())- be.UNIX_TIMESTAMP(zeit)) >'".$wkLife*3600*24 ."'
OR ((wa.UNIX_TIMESTAMP(now())- wa.UNIX_TIMESTAMP(date)) >'".$wkLife*3600*24 ."'";
$result = mysql_query($sql,$dbConnection);
while ($row = mysql_fetch_array($result))
{
echo $row['date'];
echo $row['zeit'];
}
Die Zeit wird in beiden Tabellen so abgespeichert:
20021115150418
Bin noch Anfänger auf diesem Gebiet.
Wo liegt das Problem?
Danke
Hallo,
Wo liegt das Problem?
Die Sekundenzahl ist numerisch, also nicht in '...' uebergeben.
MfG, Thomas
Habe den Code mittleweile abgeändert:
$wkLife = $wkLife*3600*24;
$sql = "Delete *
FROM warenkorb wa, besucher be
WHERE (UNIX_TIMESTAMP(now())- UNIX_TIMESTAMP(be.zeit)) >".$wkLife."
OR (UNIX_TIMESTAMP(now())- UNIX_TIMESTAMP(wa.date)) >".$wkLife;
$result = mysql_query($sql,$dbConnection);
Es wird nicht eine zeile gelöscht!
:-(