这就是我要做的。
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()
函数是如何工作的。