У меня есть столбцы date и time в моей таблице mysql, которые называются start_date и start_time соответственно. Я хочу, чтобы мои пользователи могли устанавливать для себя напоминания, которые будут отправляться за X часов до start_time, мин. 1 час и максимум 24 часа.
Я буду запускать скрипт CRON для отправки этих напоминаний. Прямо сейчас делаю:
SELECT * FROM auctions WHERE start_date=CURDATE() AND status='0'
Чтобы получить все аукционы, которые начнутся сегодня и еще не начались. Мой вопрос в том, как я могу выяснить, сейчас ли время X часов до start_time, чтобы я мог отправить им напоминание, если это так.
Есть какие-нибудь предложения?






Что-то вроде этого:
SELECT col1, col2, col3
FROM records
WHERE (records.startDate BETWEEN NOW() AND ADDDATE(NOW(), INTERVAL 9 HOUR))
AND (records.status = '0');
Есть ли причина, по которой вы не можете просто использовать простое поле временной метки вместо одного для даты и одного для времени. Таким образом, вы можете найти все, что начнется в ближайшие 5 часов (скажем), выполнив
select * from auctions where start_ts between now() and now() + interval '5 hours';
Примечание: синтаксис интервалов немного различается между базами данных, в том числе для postgresql, поэтому вам, возможно, придется немного изменить его для mysql.
Можете ли вы использовать unixtime, чтобы сэкономить время?
Поскольку в PHP есть замечательная функция под названием strtotime.
Внутри можно сказать. strtotime ("+ 20 часов") и получите unixtime на 20 часов с этого момента.
Тогда просто вопрос, какое поле больше другого, если да, отправьте уведомление.
почему cronjob указывает, что это не PHP?
Я действительно сделал это до того, как были отправлены все ответы и все заработало. Поскольку у меня крайний срок, я не могу вернуться и изменить его :)
$sql = "SELECT HOUR(ADDTIME(CURTIME(),'$hour')) as remindHour, HOUR(CURTIME()) as curHour";
$result=$this->db->query($sql);
extract($result->getAllSingle());
if ($remindHour <=$curHour) {
// Send reminders
}
Почему вы предполагаете, что он работает с PHP? Для начала он будет использовать cronjob, что указывает на то, что это может быть не PHP. во-вторых, зачем использовать strtotime для вычисления 20 часов в секундах? Это основная математика ...