0

这就是我想要做的。

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

建议表示赞赏。

4

1 回答 1

2
->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

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

于 2013-06-27T18:11:53.707 回答