2009-01-14 131 views
1

我在我的mysql表中分别有一个datetime列,分别叫做start_datestart_time。我希望我的用户能够在start_time分钟之前X小时前发送自己的提醒。 1小时,最长24小时。MySQL日期/时间计算

我将运行一个CRON脚本来发送这些提醒。现在我做:

SELECT * FROM auctions WHERE start_date=CURDATE() AND status='0' 

要获得所有的拍卖,将开始今天,尚未开始。我的问题是,如何知道现在的时间是否在start_time之前X小时,因此如果是这样,我可以向他们发送提醒。

有什么建议吗?

回答

4

事情是这样的:

SELECT col1, col2, col3 
FROM records 
WHERE (records.startDate BETWEEN NOW() AND ADDDATE(NOW(), INTERVAL 9 HOUR)) 
AND (records.status = '0'); 
2

是有一些原因,你不能只用而不是一个日期和一个时间一个简单的时间戳字段。你会发现所有的,在未来的5小时(说)开始的,通过做

select * from auctions where start_ts between now() and now() + interval '5 hours'; 

注意方式:区间语法数据库之间略有不同,这是一个为PostgreSQL数据库,所以你可能要稍微改变它为MySQL。

0

你可以使用unixtime来节省时间吗?

由于PHP有一个很棒的功能叫strtotime

在你可以说。 strtotime(“+ 20小时”),并从现在开始获得20小时的unixtime。

那么它只是一个问题,哪个领域比另一个更大,如果是的话,发送通知。

+0

为什么你会认为他在运行PHP?首先,他将使用cronjob,这表明它可能不是PHP。第二,为什么你需要使用strtotime在几秒钟内计算20小时?这是基本的数学... – jishi 2009-01-14 21:03:06

1

我实际上是在所有答案发送和工作之前这样做的。因为我在限期内,我不能回去改变它:)

$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 
}