2013-06-02 3 views
0

У меня есть таблица, которая автоматически обновляется с использованием текущей метки времени. Пусть имя столбца будет «updatedTime» .. Это дает нам значение говорят:Сравнение столбцов метки времени в php

2013-06-02 17:38:10

Теперь я хочу, чтобы сравнить это значение с текущим временем и разница должно быть меньше 180 секунд ... Это означает, что пользователь последний раз обновлялся в течение 3 минут.

Я попытался:

$statement = $conn->prepare('SELECT * FROM users WHERE NOW() - updatedTime < 180 AND visibility = 1 AND linkedInId = :linkedInId'); 
$statement->bindParam(':linkedInId', $linkedInId, PDO::PARAM_INT); 
$statement->execute(); 
if(($row = $statement->fetch(PDO::FETCH_OBJ))) 

Однако это не кажется, работает, как ожидалось.

Что еще я должен попробовать?

+0

Чтобы быть уверенным, король о MySQL или других СУБД? Это актуально, потому что другие СУБД имеют разные даты. –

ответ

0

NOW() возвращает DateTime, а не временную метку, чтобы сделать математику на даты и времени столбцов использовать interval ключевое слово:

SELECT * FROM users WHERE (NOW() - INTERVAL 3 MINUTE) < updatedTime 
0
SELECT * FROM users WHERE UNIX_TIMESTAMP() - UNIX_TIMESTAMP(updatedTime) < 180 AND visibility = 1 AND linkedInId = :linkedInId 
0

Использование в качестве:

SELECT TIME_TO_SEC(TIMEDIFF(NOW(),updatedTime)); 

Или точнее:

$statement = $conn->prepare('SELECT * FROM users WHERE TIME_TO_SEC(TIMEDIFF(NOW(),updatedTime)) < 180 AND visibility = 1 AND linkedInId = :linkedInId'); 
     $statement->bindParam(':linkedInId', $linkedInId, PDO::PARAM_INT); 
     $statement->execute(); 
     if(($row = $statement->fetch(PDO::FETCH_OBJ))) 
Смежные вопросы