使用PHP / MySQL datetime防止双重预订检查

时间:2014-10-30 12:40:15

标签: php mysql datetime

我正在创建一个课程预订系统。我在数据库中有一个名为lesson_date_time的日期,它使用mysql日期时间,每节课将持续一定的分钟数。 (由于会议记录不同,我不会将结束日期存储起来。)

为了防止从存储的日期时间加上所需的几分钟的双重预订,我似乎无法找出将检查此时间段是否存在的sql

我目前有......

$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 个答案:

答案 0 :(得分:1)

你的

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

无关

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问题。