如何形成此zend_db_select语句来比较时间戳

时间:2013-06-27 17:54:31

标签: php zend-framework zend-db-select

这就是我想要做的。

 id ip        timestamp           userid
  9 127.0.0.1 2013-06-27 16:52:49 35

我想首先查询表,看看用户的ip是否持久化。如果是这样,他/她投票2)检查当前时间戳的投票时间戳,如果他的投票时间是24小时之后,则允许他再次投票。确保他只能在24小时内投票一次。

这是我当前的zend_db_select语句。逻辑

出现了一些问题
function checkIfCanLikeH($hlid,$ip){
    $canlike = false;
    $currenttime = time();
    $checkquery = $this->dbo->select()
       ->from("hl", array("num"=>"COUNT(*)"))
       ->where("hlid = ?", $hlid)
       ->where("ip = ?", $ip)
       ->where("timestamp < ".new Zend_Db_Expr('NOW()'));
    $this->dbo->setFetchMode(Zend_Db::FETCH_ASSOC);
    $checkrequest = $this->dbo->fetchRow($checkquery);
    if($checkrequest['num']!=0){
        $ip = true;
    }
    return $ip;
}

我被困在如何比较时间戳。我需要从表中检索时间戳并检查当前时间是否小于表中的值(24小时后添加)。

建议表示赞赏。

1 个答案:

答案 0 :(得分:1)

->where("timestamp < DATE_SUB(NOW(), INTERVAL 1 DAY)");

这是使用MySQL的timestamp / datetime / date列类型的优势 - 您可以使用其内置的日期和时间函数。而且我很确定你在这里不需要Zend_Db_Expr

编辑:我不完全清楚你在问什么,但我认为上面的WHERE子句可以做你想要的,反之亦然。你可以这样做:

->where("DATE_ADD(timestamp, INTERVAL 1 DAY) < NOW()");

这是同样的事情,但写的方式不同。这意味着“时间戳+ 1天小于当前时间”。

如果有帮助,请尝试在您的数据库上运行此查询:

SELECT DATE_ADD(timestamp, INTERVAL 1 DAY), NOW() FROM hl

所以你可以看到MySQL中的DATE_ADD()函数是如何工作的。