【发布时间】:2014-11-30 12:31:48
【问题描述】:
我有下表:
id | rsvp_date | return_date | user_id | car_id
其中 ID 是 PK,rsvp_date & return_date 是 DATETIME,user_id 和 car_id 分别是用户表和汽车表的 FK。
我想要做的是每次用户想要进行预订时进行检查。检查的查询归结为这一点(此查询由函数 checkAvailability() 调用:
SELECT id
FROM `car_reservation`
WHERE ('2014-10-06 07:00:00' BETWEEN rsvp_date AND return_date)
AND car_id = 5;
我提到的功能:
function checkAvailability($datetime, $id = null){
$sql = "SELECT id
FROM `car_reservation`
WHERE ('".$datetime."' BETWEEN rsvp_date AND return_date)
AND car_id = ".$id;
$query = $this->db->query($sql);
// echo "<pre>"; print_r($this->db->last_query());die();
if($query->num_rows() > 0){
return FALSE;
}else{
return TRUE;
}
}
给定日期将与 rsvp_date 和 return_date 列匹配。日期取自表单中的一个字段(有 2 个字段:开始日期和返回日期)。
当前代码无法按我希望的那样工作。例如:
- 客人#1:2014-10-06 07:00:00至2014-10-06之间预留车A 10:00:00 [有效]
- 客人#2:2014-10-06 07:00:00 之间预留车B 至 2014-10-06 10:00:00 [有效]
- 客人 #3:预留车厢 A 2014-10-06 08:00:00 至 2014-10-06 11:30:00 [不可用,由于开始 时间不可用]
- 客人 #4:2014-10-06 06:00:00 至 2014-10-06 之间预留车 B 14:00:00 [有效,但不应该是。由于客人 #2 已经 07:00:00 - 10:00:00 之间订车]。
谁能帮助我如何改进我的代码,以便在请求的预订之间已经有预订时,最后一个条件将返回 False?
PS:我找到了这篇文章,但很难理解它,我正在寻找一种更简单的类似方法。 http://www.codeproject.com/Articles/168662/Time-Period-Library-for-NET
编辑:
这张图片可视化了一切,我想现在我只需要实现每个列标题上指定的功能(那些有复选标记的人)。
【问题讨论】:
-
您只检查一个特定的时间点
2014-10-06 07:00:00,它介于2014-10-06 06:00:00和2014-10-06 14:00:00之间。所以一切正常。但是您必须检查计划预订的开始日期和结束日期。 -
@TiMESPLiNTER 我想我理解你的概念,我只是不知道该怎么做。我是否根据每小时范围检查了计划预订的开始和结束日期?
-
在下面查看我的答案。
标签: php mysql codeigniter-2