我正在尝试获取每天的注册用户总数。目前我正在使用这个:
$sql = "SELECT name, email FROM users WHERE DATE_SUB(NOW(), INTERVAL 1 DAY) < lastModified"
但我不确定这是否每天或每 24 小时有效?
例如,不应退回 22 小时前注册的用户。我只想要今天的用户(=星期二)。
我正在尝试获取每天的注册用户总数。目前我正在使用这个:
$sql = "SELECT name, email FROM users WHERE DATE_SUB(NOW(), INTERVAL 1 DAY) < lastModified"
但我不确定这是否每天或每 24 小时有效?
例如,不应退回 22 小时前注册的用户。我只想要今天的用户(=星期二)。
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
与您正在寻找的上限和下限进行比较会更有效,在这种情况下 >= 00:00 onSUBDATE(NOW(),INTERVAL 1 DAY)
和 < 00:00 onNOW()
因此,您可以使用 BETWEEN 进行选择,给出以下内容。
SELECT
name,
email
FROM users
WHERE lastModified
BETWEEN DATE( DATE_SUB( NOW() , INTERVAL 1 DAY ) )
AND DATE ( NOW() )
我想你需要
SELECT
name,
email
FROM users
WHERE DATE(lastModified) = DATE( NOW() )
这有效地“仅四舍五入到日期”,因此只会匹配“自午夜以来”的记录。