我正在努力获得每天注册用户的数量。目前我正在使用这个
$sql = "SELECT name, email FROM users WHERE DATE_SUB(NOW(), INTERVAL 1 DAY) < lastModified"
但我不确定这是每天工作还是每24小时工作一次?
例如,22小时前注册的用户不应该像今天(=星期二)的用户那样退回
答案 0 :(得分:24)
lastModified可能是一个日期时间。要将其转换为日期,您只需将其包装在DATE()即DATE(lastModified)
中即可。 DATE()
返回日期时间值的日期部分,该值在当天实际为00:00。
SELECT
name,
email
FROM users
WHERE DATE(lastModified) = DATE( DATE_SUB( NOW() , INTERVAL 1 DAY ) )
使用它来匹配WHERE
虽然效率很低,因为所有行都需要将DATE应用于它们,因此它可能会扫描整个表。将lastModified
与您要查找的上限和下限进行比较会更有效,在这种情况下,SUBDATE(NOW(),INTERVAL 1 DAY)
上的&gt; = 00:00和&lt; NOW()
因此,您可以使用BETWEEN进行选择,提供以下内容。
SELECT
name,
email
FROM users
WHERE lastModified
BETWEEN DATE( DATE_SUB( NOW() , INTERVAL 1 DAY ) )
AND DATE ( NOW() )
答案 1 :(得分:8)
我认为你需要
SELECT
name,
email
FROM users
WHERE DATE(lastModified) = DATE( NOW() )
这实际上“仅轮流到日期”,因此仅匹配“自午夜以来”的记录。