Как сформировать этот оператор 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 часа).

Совет оценен.


person Slay    schedule 27.06.2013    source источник


Ответы (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

так что вы можете увидеть, как работает функция DATE_ADD() в MySQL.

person Tim Fountain    schedule 27.06.2013
comment
привет Тим! Спасибо за ответ. Хотел бы спросить, как мне получить значение отметки времени из столбца таблицы и добавить к нему 1 день. Мне нужно сравнить текущую метку времени с меткой времени (в таблице + 1 день). могу я сделать это одним запросом? - person Slay; 27.06.2013