2012-02-19 3 views
0

Im пытается создать задание cron, включающее агрегирование электронных писем, отправленных в течение периода.MySQL select row dateandtime> NOW

Мне нужно выполнить запрос, такие как

SELECT count(*) from table where action_time < NOW(); 

Как будет идти об этом?

Я знаю CURDATE() и CURTIME(), но мне нужно, чтобы сравнить и время и дату, так что действие выполняется в точной минуте после события, CURTIME будет означать в полночи я хотел бы получить вопрос.

Редактировать: CURTIME() включает только время, поэтому работа в db с временем действия 23:59:59 не будет запущена в 00:00:59 - через минуту (так как последняя не больше, чем первая)

я могу использовать DateTime или временную метку, но что бы использовать в качестве функции сравнения (я использую NOW() выше, но это не работает)

Обновление: Я попытался с помощью SELECT COUNT (*) из таблицы, где UNIX_TIMESTAMP (action_time) < UNIX_TIMESTAMP (NOW()); и он работает :)

+0

Какого типа данных 'action_time', он должен быть' DATETIME'. – Vyktor

+0

Это время, хотя я думал об использовании TIMESTAMP, чтобы сделать его более сопоставимым, как Mchl предложил – Akshat

ответ

0

Я попытался

SELECT count(*) from table where UNIX_TIMESTAMP(action_time) < UNIX_TIMESTAMP(NOW()); 
0

CURTIME() и NOW() оба фактически возвращают текущее время во второе. NOW() также возвращает дату. Не знаете, в чем проблема.

+0

Проблема CURTIME() не включает дату, я не уверен, поэтому, если у меня есть cron, работающий каждую минуту, задание на 11 : 59: 59 не будет работать в 00:00:59, потому что позже не больше первого – Akshat

+0

Извините, что я имею в виду работу с action_time 11:59:59, которая не запускается, когда cron запускается в следующий период – Akshat

+0

Я вижу сейчас (думаю). То, что вы должны делать, - это хранить в БД, когда выполнялось последнее задание cron (с использованием даты и времени), и сравнить ваш запрос с этим временем вместо NOW() – Mchl

0

Использовать временную метку из mysql и сравнить ее с вашим временем * nix.