2013-03-26 12 views
12

Her gün için kayıtlı kullanıcı miktarını almaya çalışıyorum. Şu anda ben buMysql DATE_SUB (NOW(), INTERVAL 1 GÜN) 24 saat veya hafta içi?

$sql = "SELECT name, email FROM users WHERE DATE_SUB(NOW(), INTERVAL 1 DAY) < lastModified" 

kullanıyorum ama bu günde veya 24 saatte çalışır emin değilim?

Örneğin, 22 saat önce kayıtlı bir kullanıcı lastModified, muhtemelen, bir datetime olan

+0

Lütfen bu yayına bakın http://stackoverflow.com/questions/589652/add-2-hours-to-current-time-in-mysql – Lazyprogrammer

cevap

23

ben sadece bugün kullanıcı (= Salı) gibi iade edilmemelidir. Bunu bir tarihe dönüştürmek için DATE() ile DATE(lastModified) numaralı telefondan paketleyebilirsiniz. DATE(), o gün etkin olarak 00:00 olan bir tarih değeri değerinin tarih bölümünü döndürür. Tüm satırlar uygulanmış TARİHİ gerektirecektir ve bu yüzden muhtemelen bütün tabloyu taramak gibi bir WHERE olsa maç için bu kullanma

SELECT 
    name, 
    email 
FROM users 
WHERE DATE(lastModified) = DATE(DATE_SUB(NOW() , INTERVAL 1 DAY)) 

verimsiz olur. O bu durumda,> = SUBDATE(NOW(),INTERVAL 1 DAY) 00:00 ve NOW()

üzerinde < 00:00 Bu nedenle sizin seçmek vererek yapmak ARASINDA kullanabilirsiniz Aradığınız üst ve alt sınırları için lastModified karşılaştırmak daha etkilidir takip etme.

SELECT 
    name, 
    email 
FROM users 
WHERE lastModified 
    BETWEEN DATE(DATE_SUB(NOW() , INTERVAL 1 DAY)) 
    AND DATE (NOW()) 
8

sana "sadece bugüne kadar mermi"

SELECT 
    name, 
    email 
FROM users 
WHERE DATE(lastModified) = DATE(NOW()) 

Bu etkin ihtiyaç ve bu nedenle sadece "gece yarısından itibaren" kayıtları maç olacağını düşünüyorum.

İlgili konular