2010-04-15 18 views
5

Her zaman karmaşık SQL sorguları ile sorun var.Bir datetime sonraki saat içinde nerede MySQL gelen satırları görüntülemek

Bu ben saat içinde Yaklaşan 6 satır kalkmak istiyorum

$query = ' 
      SELECT id, 
        name, 
        info, 
        date_time 
      FROM acms_events 
       WHERE date_time = DATE_SUB(NOW(), INTERVAL 1 HOUR) 
        AND active = 1 
      ORDER BY date_time ASC 
      LIMIT 6 
     '; 

ne var. Sorgum yanlış mı? Bunu test ettiğimde önümüzdeki saat içerisinde yaklaşan olaylar almıyor gibi görünüyor.

Bunun için doğru sözdizimi nedir? Sana DATETIME değer aralığını içeren kayıtları bir grup bakıyoruz olduğunu varsaymaktadır gidiyorum, bu yüzden muhtemelen daha böyle bir şey istiyorum

cevap

8

: Aksi

SELECT id, 
     name, 
     info, 
     date_time 
FROM acms_events 
    WHERE date_time < DATE_ADD(NOW(), INTERVAL 1 HOUR) 
     AND date_time >= NOW() 
     AND active = 1 
ORDER BY date_time ASC 
LIMIT 6 

, sorgu bakıyor bir date_time ile kayıtlar için tam olarak "şimdi + 1 saat". Tüm tarihlerin o belirli saniyeye özgü olmadığını farz ediyorum. ;)

böylece sorgu yukarıda kabaca Ne istediğini sanmıyorum, hangi SELECT ... WHERE date_time = '2010-04-14 23:10:05' ORDER BY ... gibi bir şeye çevirir, biraz, DATE_ADD() netleştirmek ve DATE_SUB() kesin damgaları dönmek için.

+0

Evet, son paragraf bunu yapıyor olabilir düşünce budur kullanmayın! Cevabınız için teşekkürler. Denememe izin ver. – alex

0
WHERE date_time = DATE_SUB(NOW(), INTERVAL 1 HOUR) 

date_time tam bir saat eski herhangi bir kayıt neden olacaktır bir saat eksi şimdi tam eşittir anlamına gelir.

Neden

WHERE TIMEDIFF(date_time, NOW()) < '01:00:00' 
AND date_time > NOW() 
+0

Neden olmasın? Çünkü MySQL, limitleri bir kez hesaplamak yerine her satır için 'TIMEDIFF (date_time, NOW())' ifadesini değerlendirmek zorunda kalacaktır ve 'date_time' üzerinde sahip olabileceğiniz dizinler kullanılmayacaktır. Hatırlatıcı için – Duncan

+0

Thx. –

İlgili konular