mysql_query("DELETE FROM dhs_branchenbuch_normaleintrag WHERE status = 'nicht aktiviert' AND $anmeldedatum > DATE_SUB(now(), INTERVAL 1 day)");
Ich möchte, nach einem Tag den Datensatz wieder löschen. Ich habe das mal lokal getestet, in dem ich in der Systemsteuerung das Datum manuell verändert habe. Aber der Datensatz wird nicht gelöscht. Wieso? Liegt es vielleicht an der Varianle $anmeldedatum? Muss es noch formatiert werden?
Original geschrieben von Zocker Also, ich habe das jetzt wie folgt gemacht:
$anmeldedatum: 2003-08-26 17:02:03;
mysql_query("DELETE FROM dhs_branchenbuch_normaleintrag WHERE status = 'nicht aktiviert' AND $anmeldedatum > DATE_SUB(now(), INTERVAL 1 day)");
Das wird nicht funzen! In der Datenbank steht doch gar nicht wann der Eintrag da gelandet ist. Du vergleichst doch bloss $anmeldedatum mit dem heutigen Datum und beziehst dich nicht auf den Datensatz.
Wenn im Datensatz stehen würde, wann er erzeugt wurde, wäre die Sache schon geritzt. Am einfachsten geht das, in dem Du in den Datensatz ein einen TIMESTAMP einfügst. Der TIMESTAMP wird bei jeder Aktualisierung des Datensatzes auf die aktuelle Zeit gesetzt.
TIMESTAMP[(M)]
A timestamp. The range is '1970-01-01 00:00:00' to sometime in the year 2037. MySQL displays TIMESTAMP values in YYYYMMDDHHMMSS, YYMMDDHHMMSS, YYYYMMDD, or YYMMDD format, depending on whether M is 14 (or missing), 12, 8, or 6, but allows you to assign values to TIMESTAMP columns using either strings or numbers. A TIMESTAMP column is useful for recording the date and time of an INSERT or UPDATE operation because it is automatically set to the date and time of the most recent operation if you don't give it a value yourself. You can also set it to the current date and time by assigning it a NULL value. See Date and time types.
A TIMESTAMP is always stored in 4 bytes. The M argument only affects how the TIMESTAMP column is displayed.
Note that TIMESTAMP(X) columns where X is 8 or 14 are reported to be numbers while other TIMESTAMP(X) columns are reported to be strings. This is just to ensure that one can reliably dump and restore the table with these types! See DATETIME.
So, jetzt brauchst Du nur folgendes zu machen:
Tabelle um eine Spalte zeit mit dem Typ TIMESTAMP ergänzen und dann
mysql_query("DELETE FROM dhs_branchenbuch_normaleintrag WHERE status = 'nicht aktiviert' AND zeit < DATE_SUB(now(), INTERVAL 14 day)");
Die Sache mit dem DATE_SUB(now... habe ich noch nie benutzt. Ich würde PHP-Funktionen nutzen, um das Vergleichsdatum zu errechnen.
Ich selber benutzte die TIMESTAMP-Geschichte nicht. Ich speichere 'von Hand' in jeden Datensatz den Unix-Timestamp $zeit = time(); und vergleiche dann mit der aktuellen Zeit.
Original geschrieben von Zocker Wie jetzt kleiner? Könntest du dich bitte etwas genauer ausdrücken?
mit deiner query löschst du alles, was neuer ist, als das abgezogene datum. du willst aber alles löschen, was älter ist.
also musst du < statt > nehmen.
Original geschrieben von cst Das wird nicht funzen! In der Datenbank steht doch gar nicht wann der Eintrag da gelandet ist. Du vergleichst doch bloss $anmeldedatum mit dem heutigen Datum und beziehst dich nicht auf den Datensatz.
das anmeldedatum ist durchaus das feld, was er nutzen will. und auf einen datensatz braucht er sich nicht beziehen, da er ALLE daten löschen will. wozu also ein WHERE dabei?
Original geschrieben von cst Die Sache mit dem DATE_SUB(now... habe ich noch nie benutzt. Ich würde PHP-Funktionen nutzen, um das Vergleichsdatum zu errechnen.
sehr umständlich. die db kann schon viele sachen machen, wodurch dein php-code deutlich weniger wird.
Original geschrieben von cst Ich selber benutzte die TIMESTAMP-Geschichte nicht. Ich speichere 'von Hand' in jeden Datensatz den Unix-Timestamp $zeit = time(); und vergleiche dann mit der aktuellen Zeit.
dann solltest du dich mal umgewöhnen. es nützt was, wenn du die DB-funktionen auch dafür verwendest.
Original geschrieben von cst Naja, viele Wege führen nach Rom.
das stimmt. die einen einfach und die anderen kompliziert. zu letzterem würde ich deinen ansatz zählen.
@cst
nimms nicht negativ auf. es soll die eine hilfe sein.
Es klappt immer noch nicht. Ich habe folgende Abfrage:
mysql_query("DELETE FROM dhs_branchenbuch_normaleintrag WHERE status = 'nicht aktiviert' AND time < DATE_SUB(now(), INTERVAL 1 day)");
Den Test habe ich lokal durchgeführt. Nach dem ich die Daten in die Datenbank eingetragen habe, habe ich das Datum um 2 Tage verändert. Aber der Datensatz befindet sich immer noch in der Datenbank.
Kommentar