Damgası, bir günden fazla eski MySQL tablo satırları kaldırma?

3 Cevap php

Ben aynı soruyu bulundu here.

Ama benim için çalışmıyor. Ben, bunu biraz modifiye onu manipüle ve ben onu anlamaya olamaz ettik. Ben bir gün eski bitti satırları kaldırmak için çalışıyorum. İşte benim kod:

if (isset($_POST['prune'])) {

    $sql = "DELETE FROM logs WHERE time < date('now', '-1 days')";
    mysql_query($sql);

    echo 'Logs older than one day removed.';    

    }

Oldukça basit bir soru sanırım, ama onun beni cehennem adamcağız. Ben herhangi bir yardım takdir ediyorum.

Bir fark yapar durumda, sütun TIMESTAMP türüdür.

EDIT: Görünüşe göre ben bir aptalım. Ben size bağlı soru SQLite3 ilgilidir. Yani şimdi benim soru bu MySQL nasıl yapabilirim, nedir?

3 Cevap

Sen bir aralık çıkarabilirsiniz:

DELETE FROM logs WHERE time < now() - interval 1 day

Bu cevap SQLite3 için IIRC oldu. Bu sözdizimini desteklemeyen MySQL kullanarak ediyoruz.

Sen DATE_ADD() function (test ama çalışması gerekir değil Aşağıdaki örnek) kullanmak istiyorsanız:

DELETE FROM logs WHERE time < TIMESTAMPADD(DAY,-1,NOW());

Benim durumumda, sadece

timestampadd

bir art sıralı tarih takvim üzerinden çalıştırırken olumlu yönde çalışır:

    if (urldecode ($aUrl['Select']) == '>')
        $this-> db-> where ('konzertdatum >', 'TIMESTAMPADD(DAY, 1, "'.  $id . '") ', false) ;
    else 
        $this-> db-> where ('konzertdatum < ', 'TIMESTAMPADD(DAY, -1, "'.  $id . '") ', false) ;

Negatif yönde (-1), zaman damgası geri ilk girişine gider. Ben de CodeIgniter'ı kullanmaya çalıştı, ama aynı sonucu.

Özetle, +1 TIMESTAMPADD işler için parametre olarak, -1 sonra tekrar birinciye atlama düşük ikinci giriş (için çalışıyor. Ama uzakta ilk tarihten itibaren daha fazla adım zaman başarısız .