0

これが私がやろうとしていることです。

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

最初にテーブルにクエリを実行して、ユーザーの IP が保持されているかどうかを確認したいと思います。2) 投票のタイムスタンプを現在のタイムスタンプと照合し、投票時間が 24 時間以上経過している場合は、再度投票できるようにします。彼が 24 時間に 1 回だけ投票できるようにします。

これは私の現在の 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 に答える