我正在做一个需要找到可用单位的项目。相关信息如下:
包含字段 id、名称、所有者、地址、活动(布尔值)、预订(布尔值)的单位表
包含字段 id、单位(与 unit.id 绑定)、客人、价格、arrival_date、depart_date、签入(布尔)、结账(布尔)、已清洁(布尔值)的预订表
用户选择到达日期和离开日期。由此,我需要建立一个可用单位的列表。我很难从逻辑上思考这个问题。我正在用PHP做这个,到目前为止有这个:
$con = mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME);
//get date
$arrival = '2013-10-1'; //$_POST['arrival'];
$depart = '2013-10-1'; //$_POST['depart'];
//define arrays
$a = array();
$d = array();
$result = mysqli_query($con, "SELECT arrival, departure FROM reservations WHERE arrival > '".$depart."'");
$i=0;
while( $row = mysqli_fetch_assoc($result))
{
$a[] = $row['arrival'];
$d[] = $row['departure'];
echo ' ('.$i.') ';
echo $a[$i];
echo ' ';
echo $d[$i];
$i++;
}
这产生了我想要的(出发日期必须在其他一方到达之前。
我也知道抵达不能在入住期间。
谁能帮我解决这个问题?这真的让我难倒了。我什至不一定需要查看代码;伪代码甚至会不胜感激。
可用单位是没有冲突预订的单位。
确认预订是指在期望出发之前(或)到达和在期望到达之后(或)离开的预订。
此逻辑通过如下所示的查询实现:
select unit from unit u
left join reservations r on r.unit = u.id
and r.arrival <= $departure
and r.departure >= $arrival
where r.unit is null