我正在尝试创建一个自定义查询,以显示Drupal 6网站上过去24小时内发布的故事数。
故事存储在“节点”表中。每条记录都有一条“已创建”的行,用于记录故事发布时的UNIX时间戳。
这是我到目前为止所尝试的查询:
$sq = 'SELECT COUNT(*) cnt '
. 'FROM {node} c WHERE created >= dateadd(hour,-24,getdate())';
这似乎不起作用。我做错了什么?
编辑:这是我现在正在尝试使用的整体代码:$sq = 'SELECT COUNT(*) AS cnt FROM {NODE} n WHERE FROM_UNIXTIME(n.created) >= DATE_SUB(NOW(), INTERVAL 1 DAY)';
$ q = db_query($ sq);
while($ o = db_fetch_object($ q)){
print_r($o);
}
print_r没有返回任何内容。哪里是我的错误?
答案 0 :(得分:4)
对于MySQL,请使用:
SELECT COUNT(*) AS cnt
FROM NODE n
WHERE FROM_UNIXTIME(n.created) >= DATE_SUB(NOW(), INTERVAL 1 DAY)
请注意NOW()
包括运行语句的时间。如果您想从前一天的午夜开始计算记录,请使用:
SELECT COUNT(*) AS cnt
FROM NODE n
WHERE FROM_UNIXTIME(n.created) >= DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY)
参考:
答案 1 :(得分:2)
由于您是在PHP中执行此操作,因此可以使用$_SERVER['REQUEST_TIME']
。我的猜测是它会比使用SQL进行日期操作更快:
$count = db_result(db_query("SELECT COUNT(nid) FROM {node}
WHERE created >= %d;", $_SERVER['REQUEST_TIME'] - 86400));
备选方案您可以使用time
来获取当前时间戳,但这比使用$_SERVER['REQUEST_TIME']
变量要慢一点。