SQL Query显示过去24小时内创建的故事数量?

时间:2010-10-27 04:51:57

标签: php sql drupal timestamp

我正在尝试创建一个自定义查询,以显示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没有返回任何内容。哪里是我的错误?

2 个答案:

答案 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']变量要慢一点。