2014-10-30 105 views
0

我正在创建一个课程预订系统。我在名为lesson_date_time的数据库中有一个日期,它使用mysql日期时间,每个课程将持续一段时间。 (我不存储结束日期,因为分钟不同)使用PHP/MySQL防止重复预订检查datetime

为了防止存储的日期时间加上所需的分钟的任何双重预订,我似乎无法弄清楚将做检查,看看这次期间存在

我现在有...

$mins = "60"; 
$date_start = "2014-10-30 12:40:00"; 
$date_end = date("Y-m-d H:i:s", strtotime("$date_start + $mins minute")); 

WHERE lesson_date_time BETWEEN CAST('$date_start' AS DATETIME) AND CAST('$date_end' AS DATETIME) 

这确实检查和有点儿工作,但是没有赶上其在一小时的开始日期的任何条目(或时间段才结束日期)后$ start_date。

也试过

WHERE lesson_date_time >= '$date_start' and lesson_date_time =< '$date_end 

不找到任何结果,即使他们退出。

是否有可能做我想做的事情还是仅仅是比较容易,如果我储存的教训结束时间去从那里

回答

1

之间你

WHERE lesson_date_time BETWEEN CAST('$date_start' AS DATETIME) AND CAST('$date_end' AS DATETIME)

将equivilent到

WHERE lesson_date_time >= CAST('$date_start' AS DATETIME) AND lesson_date_time <= CAST('$date_end' AS DATETIME)

这仍然是行不通的,因为你只是在寻找经验教训,将在本课中开始。你将不会得到正在继续这一课的内容。为了得到这些,你必须存储结束日期(更容易)或存储课程长度。

如果所有的课程都是60分钟,你可以做类似的事情。

$mins = "60"; 
$date_start = "2014-10-30 12:40:00"; 
$old_lesson_start = date("Y-m-d H:i:s", strtotime("$date_start - $mins minute")); 
$date_end = date("Y-m-d H:i:s", strtotime("$date_start + $mins minute")); 

WHERE lesson_date_time BETWEEN CAST('$old_lesson_start' AS DATETIME) AND CAST('$date_end' AS DATETIME) 

然后,它会捕捉到60分钟前开始的课程,因此将继续学习本课。

如果您决定存储长度或结束日期,我们可以帮助您解决SQL问题。