Datensatz nach 3 Tagen automatisch löschen. |
KeyLF
Forenheld Threadstarter
Beiträge: 866 |
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: 1930 |
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: 844 |
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 Threadstarter
Beiträge: 866 |
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: 1930 |
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: 621 |
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: 1930 |
ach fuck- das meinte ich doch... arrg - naja mathe war noch nie meine stärke
|
 Profil
Editieren
Zitieren
|
KeyLF
Forenheld Threadstarter
Beiträge: 866 |
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: 1930 |
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: 844 |
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.
|
 Profil
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
Mausakrobat
Beiträge: 172 |
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
Editieren
Zitieren
|