Beiträge Löschen die älter als xx Tage sind

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Beiträge Löschen die älter als xx Tage sind

    Hallo,

    Habe da mal wieder ein Problem.
    In meiner Shoutbox will ich per SQL Beiträge Löschen die älter als xx Tage sind.

    Die sql spalte lautet timestamp mit dem TYP int(11)
    Das Datum wird als time() eingetragen.

    Mein SQL Code

    Quellcode

    1. DELETE FROM `shoutbox` WHERE DATE_SUB(CURDATE(), INTERVAL 30 DAY) >= timestamp


    Anstatt die Einträge zu Löschen die älter als 30 Tage sind Löscht er alle Einträge.
    Klar, das ganze wäre mit

    Quellcode

    1. DELETE FROM `table` WHERE `timestamp` < time()-86400;
    ohne Probleme möglich aber gerne hätte ich dies mit Angabe der Tage

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Fragz ()

  • Hallo,

    Hafner schrieb:


    Welchen Typ hat denn die Spalte timestamp?


    Der Typ der Spalte ist int(11)

    Hafner schrieb:



    Was gibt diese SQL-Query aus?

    Quellcode

    1. SELECT DATE_SUB(CURDATE(), INTERVAL 30 DAY), `timestamp` FROM `shoutbox` WHERE DATE_SUB(CURDATE(), INTERVAL 30 DAY) >= `timestamp` AND `timestamp` > time()-86400


    Einen Fehler

    #1064 - Fehler in der SQL-Syntax. Bitte die korrekte Syntax im Handbuch nachschlagen bei ')-86400 LIMIT 0, 30' in Zeile 1


    Noch was, gibt es bei der Abfrage unterschiede was MySQL auf Linux und Windows angeht?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Fragz ()

  • Stimmt hätte ich auch selber drauf kommen können

    Also das Ergbniss

    MySQL lieferte ein leeres Resultat zurück (d.h. null Zeilen). ( die Abfrage dauerte 0.0004 sek. )


    EDIT:

    Lasse ich das ganze wie du es sagtest mit date oder datetime laufen und trage vom PHP Script mit time() ein ist das Datum der 01.01.1970

    Anstatt das ganze über PHPMYADMIN laufen zu lassen habe ich nun im PHP Script versucht wie es auch in der FInal Version sein soll.

    Quellcode

    1. $timer = time() - 60 * 24 * 60 * 60;
    2. $timer = intval($timer);
    3. $DB->set_sql('DELETE FROM `cback_portal_shoutbox` WHERE `timestamp` >=:1;');
    4. $DB->execute($timer);
    5. $DB->free();


    Die erste 60 steht für die Tage. Ohne Erfolg. Ich habe 2 Testeionträge, einen von heute und einen vom 01.11.2011 aber er löschte gleich beide Einträge

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Fragz ()

  • Vergiss das mit dem SQL-Statement, das sollte nur die Einträge anzeigen, die von der einen Methode erfasst werden, von der anderen aber nicht. Also einfach nur ein Statement zur Fehleranalyse.

    Lege erstmal deine Testdaten an.

    Dann schaust du erst einmal mit einem SELECT, ob die WHERE-Klausel die richtigen Zeilen erfasst. Hier hab ich die MYSQL-Funktion FROM_UNIXTIME verwendet um deinen INT in ein DATETIME umzuwandeln. Ich gehe davon aus, dass in der Spalte timestamp die Sekunden angegeben sind (und nicht etwa Millisekunden).

    Quellcode

    1. SELECT * FROM `shoutbox` WHERE DATE_SUB(CURDATE(), INTERVAL 30 DAY) >= FROM_UNIXTIME(`timestamp`)


    Wenn das stimmt, kannst du es auch mit DELETE machen.

    Quellcode

    1. DELETE FROM `shoutbox` WHERE DATE_SUB(CURDATE(), INTERVAL 30 DAY) >= FROM_UNIXTIME(`timestamp`)