My SQL und Zeit

jeep42

Grünschnabel
Hallo,

Also eine Tabelle mit den Namen Posteingang hat unter anderem die Spalten User, Nachrichten und Timestamp.

Damit sich die SQL nicht aufbläht wie Luftballon will ich alle Nachrichten löschen lassen die älter als 31 Tage im Timestamp festgehalten sind ...

Kurze Erklärung der Spalten...

1.) User -> Hier ist die ID des Mitglieds in der Spalte festgehalten

2.) Nachrichten -> Hier sind die Nachrichte des jeweiligen Mitglied festgehalten

3.) Hier ist der Timpstamp der jeweiligen Nachricht festgehalten, der Timestamp ist wie folgend in der Spalte festgehalten: zb 12.02.2005

Im Prinzip müsste das so gehen löschen der Nachricht wenn diese grösser als 31 tage im Bezug dauf dem Timestamp ist

Bloss wie codet man das dass ist eben mein Problem ..

Die SQl Ausführung müsste so beginnen:

$query = "Delete FROM Posteingang WHERE .............................................";
mysql_db_query($dbname,$query,$conn) or die (mysql_error());

Würde mich riesig freuen wenn man mir weiter helfen könntest komme einfach mit den Time Problem nicht klar.

Besten Dank schon mal im vorraus
 
Zuletzt bearbeitet:
Hallo

ist schon alles ganz okay wie Du das machen kannst. Schau mal auf die MySQL Doku und wandler dein Datum und Deine Zeitspanne jeweils in das UNIX Format um. Auf der MySQL Doku Seite sind ausreichend Beispiele dazu.

Chris
 
MySQL Datums- und Zeitfunktionen
Code:
... WHERE DATE_SUB(NOW(), INTERVAL 1 MONTH) > `timestampspalte`
Code:
... WHERE DATE_SUB(NOW(), INTERVAL 31 DAY) > `timestampspalte`
Vorrausgesetzt natürlich, die Spalte ist vom Typ DATETIME, DATE oder TIMESTAMP.
"12.02.2005" ist so ziemlich die ungünstigste Art, ein Datum in einer Datenbank zu speichern.
 
Danke hpw wie kann man das ganze noch erweitern mit einer Spann "gelesen" in der Spalte gelesen steht drin ob die Nachricht gelesen ist wenn ja dann steht dort YES und soll nach 31 Tage gelöscht werden wenn die Nachricht noch nicht gelesen ist steht in der Spalte gelesen NO und dann soll die Nachricht erst nach 42 Tagen gelöscht werden .....

hmmm wie erweitere ich Deine Programmierung mit meiner gewünswchten Bedingung jetzt?

... WHERE DATE_SUB(NOW(), INTERVAL 42 DAY) > `timestamp`
 
Mit and und or:
Code:
... WHERE 
(`gelesen`='YES' AND 
    DATE_SUB(NOW(), INTERVAL 31 DAY) > `timestampspalte`) 
OR (`gelesen`='NO' AND 
    DATE_SUB(NOW(), INTERVAL 42 DAY) > `timestampspalte`)
 
Zurück