Tarih farklılıkları içeren bir MySQL sorgusu yazma ile yardımcı

4 Cevap php

Ben bir datetime alan üzerinde 2 hafta eski satırları silmeniz gerekir.

Bu ne ile geldi budur

$duration = Date::WEEK * 2; // int(1209600)
$query = 'DELETE FROM properties
            WHERE TIMEDIFF(' . date(DATE_ISO8601) . ', reserved_datetime) > ' . $duration;

Ben sık sık (ben daha rahatım PHP, içinde bir şeyler yapmak için tercih) karmaşık sorguları yazmak istemiyorum ama ben onlar hakkında daha fazla bilmek istiyorum, artı PHP bu tür bir şey yapmak çok verimsiz olacağını ve taşıma am satırları daha büyük bir miktar.

Herkes yanlış ne yapıyorum biliyor musun? Şerefe.

Update

Ben sadece bu yüzden neler olduğunu görebiliyordu SELECT phpMyAdmin hafifçe değiştirerek, Wallyk's answer bir vuruş verdi.

Bu benim kullanılan budur

SELECT *
FROM properties
WHERE date_sub( `reserved_datetime` , INTERVAL 2 week ) >0
LIMIT 0 , 30

Tek sorun, ancak bu satırları döndü nerede olduğunu reserved_datetime (şimdi) kesinlikle en az 2 hafta önce, 2010-02-28 10:45:59 olduğunu.

Ben MySQL iç tarihini kontrol düşündüm. Ben MySQL en NOW() tam olarak doğru değil, çünkü benim sorguları date(DATE_ISO8601) kullanılarak (ilgilenen olmadığını sadece iade 2010-02-28 20:09:19). Edilmiştir

Bu sorguda geçerli tarihi belirtmek için bir yolu var mı? Başka bir öneriniz?

Çok teşekkürler

Another Update

İşte benim sözlerim can daha iyi bir şey gösterebilir phpMyAdmin bir ekran görüntüsü. Tüm diğerleri boş değerlere sahip, çünkü Oh, ve 3. döndü nedeni sadece, yani 0000-00-00 00:00:00

query

4 Cevap

Kullanın:

 FROM PROPERTIES p
WHERE p.reserved_datetime <= DATE_SUB(NOW(), INTERVAL 2 WEEK)

Çünkü NOW() kullanarak, iki haftalık tarih saat bölümünü içerecek aklınızda.

wallyk cevabı doğru değil. Eğer ne yaptığınızı düşünün - hemen hemen her tarihten itibaren iki hafta çıkarılarak yine sıfırdan büyük (sıfır = 1/1/1970) olacaktır. Ben daha böyle bir şey istiyorum düşünüyorum:

DELETE FROM properties WHERE DATE_SUB(NOW(), INTERVAL 2 WEEK) > reserved_datetime

Ben emin için çalışır eğer öyleyse ben söyleyemem bir mysql veritabanı yok, ama postgresql yapar:

DELETE FROM properties WHERE (NOW() - reserved_datetime < interval '2 weeks')

Bunun yerine bu deneyin:

$query = 'DELETE FROM properties
         WHERE date_sub(reserved_datetime, interval 2 week) > 0';

Bu reserved_datetime alan adı tabloda olduğunu varsayar.

(MySQL 5.0.46-standardı ile test edilmiştir.)