Home | Registrieren | Einloggen | Suchen | Aktuelles


Forum » PHP & MySQL » Datensatz nach 3 Tagen automatisch löschen. Antworten
Datensatz nach 3 Tagen automatisch löschen.

KeyLF
Forenheld


Beiträge: 872


Hallo mal wieder.

Wie kann ich in einer SQL Datenbank einen Datensatz nach 30 Tagen automatisch löschen lassen, sodas dieser nicht mehr angezeigt wird. Z.B. in einem GB.

MFG

KeyLF

  Profil   Editieren   Zitieren

michael
Foren-Team


Beiträge: 1933


mit einem cron-job der regelmäßig ausgeführt wird und die beiträge auf aktualität prüft... oder du setzt ne abfrage ob ein beitrag ein gewisses alter erreicht hat in eine funktion die häufig aufgerufen wird.

bei beidem wird einfach nur geprüft ob die timestamp die der beitrag hat (die der beitrag haben dann muss ) älter als 30 tage ist.


  Profil   Editieren   Zitieren

subjective
Forenheld


Beiträge: 848


Jep also in einem Feld die aktuelle Zeit speichern und dann:

...
$oldtime = date() - (30 * 86400);
$sql = "DELETE FROM tabelle WHERE time < '$oldtime'";
...

Am besten kommt es wenn das Teil über einen Cron-Job läuft. Ansonsten wäre es beim Anzeigen auch möglich, kostet aber mehr Performance.

Thomas


---
Weaverslave

  Profil   Website   Editieren   Zitieren

KeyLF
Forenheld


Beiträge: 872


Nur fürs Verständnis, was bedeutet die 86400 und welches Format muß der TimeStamp haben?

KeyLF

  Profil   Editieren   Zitieren

michael
Foren-Team


Beiträge: 1933


Ein Monat hat 86400 Sekunden (-> Timestamp besteht auch nur aus sekunden)

Die Timestamp sollte ein Integer-Wert sein.


  Profil   Editieren   Zitieren

soeren
Posting-Schinder


Beiträge: 615



Michael schrieb am 2002-02-13 18:47 :
Ein Monat hat 86400 Sekunden (-> Timestamp besteht auch nur aus sekunden)

Die Timestamp sollte ein Integer-Wert sein.


:confused
der tag hat 86400 sekunden
deshalb steht ja da 30*86400
mathe kann aber auch schwer sein.



---
mfg
Sören

  Profil   Editieren   Zitieren

michael
Foren-Team


Beiträge: 1933


ach fuck- das meinte ich doch... arrg - naja mathe war noch nie meine stärke


  Profil   Editieren   Zitieren

KeyLF
Forenheld


Beiträge: 872


Naja das klingt ja alles ganz logisch aber wenn ich einen Timestamp erstellenlasse so sieht der z.B. so aus: 20020214150349

und wie kommen den dann die 84000 zustande, vielleicht hab ich nen denkfehler, naja vielleicht kann mir dabei noch jemand weiterhelfen!?

  Profil   Editieren   Zitieren

michael
Foren-Team


Beiträge: 1933


du guckst ob der timestamp+die anzahl sekunden die ein monat hat (60x60x24x30) kleiner ist als die aktuelle timestamp.


  Profil   Editieren   Zitieren

subjective
Forenheld


Beiträge: 848


Ich habe natürlich auch die falsche Funktion erwischt. Korrekt wäre time() um den aktueen Timestamp zu erhalten.

Das was du da zeigst ist das anderes Datumsformat. Wir meinen den Unix-Timstamp. Das sind die Sekunden seit dem 1.1.1970. Mit diesem Wert läßt sich am einfachsten rechnen.

Thomas


---
Weaverslave

  Profil   Website   Editieren   Zitieren

Talk-Server
Pixelschubser


Beiträge: 4


Ist doch voll easy :smile

Er arbeitet mit dem Format
JJJJMMTTHHMMSS

Das heißt er muss das noch passend umwandeln

$datum = date("YmdHis", $oldatum);
und dann die überprüfung mit SQL


---
Mfg Neo Track

Visit: Talk-Server.com

  Profil   E-Mail   Website   Editieren   Zitieren

Lexia
Pixelschubser


Beiträge: 13


Und wenn das Datum einfach als Varchar gespeichert wurde?
Also 06.09.2006 ?

  Profil   E-Mail   Editieren   Zitieren

languitar
Foren-Team


Beiträge: 2795


Kannst du dir das ganze erst mit mktime in eine timestamp umwandeln und dann die üblichen Rechnungen drauf anwenden.

---
Take a look here!
Lichtblick - Einblick - Ausblick

  Profil   E-Mail   Website   Editieren   Zitieren

Lexia
Pixelschubser


Beiträge: 13


Sorry aber ich glaub da bin ich echt zu blöd für...

also sagen wir mal ich hab hier erstmal die verbindung:

$link = mysql_connect( $dbhost, $dbuser, $dbpw );
if (! $link)
die("Keine Verbindung zum MySQL-Server");
mysql_select_db($dbname)
or die ("Konnte Datenbank \"$dbname\" nicht öffnen:".
mysql_error() );


ok, klappt bis dahin auch ganz wunderbar.
dann will ich den wert "datum" auslesen (oder theoretisch muss ich das ja gar nicht um den zu ändern oder?)
$abfrage = "SELECT datum FROM blackboard";
$ergebnis = mysql_query($abfrage,$link);

So und von jetzt an weiss ich gar nichts mehr... hab leider echt wenig Ahnung von php... wäre super, wenn mir jemand helfen könnte:
$datumoriginal = mktime(0,0,0,32,12,2000);
$oldtime = $datumoriginal() - (90 * 86400);
$sql = "DELETE FROM $table WHERE datum < '$oldtime'";
mysql_query($sql,$link);

Viele Grüße,
Lexia

  Profil   E-Mail   Editieren   Zitieren

raiserle
Fachidiot


Beiträge: 144


hmm
warum die frage, was verstehst du nicht. steht doch oben schon alles richtig da.
vorrausgesetzt, du speicherst als timestamp.

du brauchst dort kein mktime(); und richtig hast dus selber erkannt, du musst vorher kein select aus der db machen.
time() liefert doch den aktuellen timestamp. davon kannste ja nun deine differenz abziehen
86400*tage

mktime() macht nur sinn, wenn du genau auf beginn des heutigen tages hinaus willst.

$heute_zur_geisterstunde=mktime(0,0,0,date('n',time()),date('j',time()),date('Y',time()));

---
Irren is Menschlich

Wer andern eine Grube gräbt,
sollte darüber nachdenken,
ob sie tief genug ist!!!!

Kameradschaft ist, wenn der
Kamerad schafft !!!!

  Profil   E-Mail   Website   Editieren   Zitieren
Seite 1 | 2  

Antworten
Nach oben