MySQL - automatisches Löschen

Moin,

ich trau mich auch mal hier was zu fragen. :o)

Also, wir haben eine MySQL-Datenbank, auf der ein Board und Portal laufen.
Bei beiden Teilen hat man die Möglichkeit anderen Usern private Nachrichten zu schicken.
Die Nachrichten legen sich artig in der Datenbank ab - und vergammeln da, wenn die User sie nicht selber löschen.

Wie bringen wir der Datenbank denn nu’ bei, dass sie nach einer bestimmten Regel die Nachrichten, wenn sie gelesen sind, löschen soll?

Idee:
Datenbank errechnet den timestamp selbständig.
Datenbank zieht davon dann eine bestimmte Zahl (nämlich 1296000
= 15 Tage) ab.
Dann soll die DB prüfen, ob eine Nachricht gelesen ist oder nicht.
Und wenn dann auch noch Datum der Nachricht kleiner als timestamp-1296000 ist, dann soll sie die Nachricht löschen.
(die letzten beiden Überprüfungen kann sie auch in einer anderen Reihenfolge vornehmen. :o))

Reicht das für eine Lösung?
Oder braucht ihr noch irgendwelche Hinweise?

Danke schon mal!
Pia

Hi Pia,

ich trau mich auch mal hier was zu fragen. :o)

ist ja klasse, zumal Du ja schon die richtige Antwort weißt :smile:

Datenbank zieht davon dann eine bestimmte Zahl (nämlich
1296000
= 15 Tage) ab.
Dann soll die DB prüfen, ob eine Nachricht gelesen ist oder
nicht.
Und wenn dann auch noch Datum der Nachricht kleiner als
timestamp-1296000 ist, dann soll sie die Nachricht löschen.
(die letzten beiden Überprüfungen kann sie auch in einer
anderen Reihenfolge vornehmen. :o))

Genau. Das entsprechende Statement heißt:

DELETE FROM 
 where = 0 and 

Wobei Du hier die richtigen Werte für Tabelle, Datumsfeld und Gelesen eintragen mußt.

Das einzige Problem is


> Datenbank errechnet den timestamp selbständig.

Das kann MySQL (noch) nicht, d.h. Du mußt Dir eine externe Lösung überlegen. Entweder handgesteuert (jemand startet ab und zu mal ein Script) oder, viel angenehmer, über einen cronjob (ist das Unix?) bzw. at (wenn Windows).

Bei konkreteren Fragen: Mail :smile:

Gruß

J.

Hi Jose,

ich trau mich auch mal hier was zu fragen. :o)

ist ja klasse, zumal Du ja schon die richtige Antwort weißt :smile:

Na ja… die Logik ist nicht unser Problem *lach*
Das Problem ist, dass wir in dem Bereich noch Anfänger sind, und nicht wissen, wo und wie wir das einbasteln können, damit das ganze automatisiert wird…

Das einzige Problem is

Datenbank errechnet den timestamp selbständig.

Das kann MySQL (noch) nicht, d.h. Du mußt Dir eine externe
Lösung überlegen. Entweder handgesteuert (jemand startet ab
und zu mal ein Script) oder, viel angenehmer, über einen
cronjob (ist das Unix?) bzw. at (wenn Windows).

Also… ich denke, die DB liegt auf einem Unix-Server (puretec)
kann man das einfach irgendwo in die DB schreiben, damit es automatisiert wird, oder müssen wir das in unserem Forumscript als .inc-Datei einfügen?

Gruß
Gerlinde
http://www.kephasweb.de

Hi,

Also… ich denke, die DB liegt auf einem Unix-Server
(puretec)

Da sollte man versuchen zu klären, ob Cronjobs bei denen möglich sind. Vielleicht postest Du diese Frage im Brett Homepage, da weiß das vielleicht jemand.

kann man das einfach irgendwo in die DB schreiben, damit es
automatisiert wird

Wie gesagt, MySQL beherrscht das nicht.

, oder müssen wir das in unserem Forumscript
als .inc-Datei einfügen?

Da kenne ich mich zuwenig aus, aber wahrscheinlich ist das eine gangbare Methode. Es müßte eine Stelle sein, die entweder nicht zu häufig ausgeführt wird, oder eine, bei der es auf ein paar Sekunden nicht ankommt.
In welcher Sprache ist das Script geschrieben?

Gruß

J.

Hi,

Also… ich denke, die DB liegt auf einem Unix-Server
(puretec)

Da sollte man versuchen zu klären, ob Cronjobs bei denen
möglich sind. Vielleicht postest Du diese Frage im Brett
Homepage, da weiß das vielleicht jemand.

wahrscheinlich nich… *gg*

kann man das einfach irgendwo in die DB schreiben, damit es
automatisiert wird

Wie gesagt, MySQL beherrscht das nicht.

gut, also muss es irgendwo angezogen werden…

, oder müssen wir das in unserem Forumscript
als .inc-Datei einfügen?

Da kenne ich mich zuwenig aus, aber wahrscheinlich ist das
eine gangbare Methode. Es müßte eine Stelle sein, die entweder
nicht zu häufig ausgeführt wird, oder eine, bei der es auf ein
paar Sekunden nicht ankommt.
In welcher Sprache ist das Script geschrieben?

das Script ist PHP…
nimmt so was eigentlich viele Resourcen wech? Weil sonst könnte man es doch einfach irgendwo einbinden, wo es garantiert aufgerufen wird… andererseits können wir aber auch eine extra Seite dafür machen… die müßten wir allerdings dann täglich aufrufen… auch blöd…
*grübel*
Gruß
Gerlinde

wahrscheinlich nich… *gg*

Das hast Du jetzt gesagt :smile:

das Script ist PHP…
nimmt so was eigentlich viele Resourcen wech?

Je nach Anzahl der Nachrichten in der Tabelle (sagen wir, ab etwa 50.000) könnte es schon mal ein paar Sekunden dauern. Wichtig ist, daß ein Index auf die beiden gemeinsam abgefragten Spalten gelegt wird (also Datum und Gelesen), etwa so:
create index kuckuck on tabelle(datum, gelesen);

Weil sonst
könnte man es doch einfach irgendwo einbinden, wo es
garantiert aufgerufen wird…

Wie gesagt, wenn Ihr eine geeignete Seite findet (z.B. beim Einloggen eines Admins o.Ä.)…

andererseits können wir aber
auch eine extra Seite dafür machen… die müßten wir
allerdings dann täglich aufrufen… auch blöd…

Ja, sehe ich genauso. Lieber automatisch!

Gruß

J.