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


How to form this zend_db_select statement to compare timestamp

这就是我要做的。

 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小时)。

非常感谢您的建议。

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

这就是使用MySQL的时间戳/日期时间/日期列类型的优势——您可以使用其内置的日期和时间函数。我敢肯定你在这里不需要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()函数是如何工作的。