0

我正在做一个需要找到可用单位的项目。相关信息是这样的:

包含字段 id、name、owner、addr、active(boolean)、booked(boolean) 的单位表

带有字段 id、unit(绑定到 unit.id)、guest、price、arrival_date、depart_date、checkin(boolean)、checkout(boolean)、cleaned(boolean) 字段的预订表

用户选择到达日期和出发日期。从那我需要建立一个可用单位的列表。我很难从逻辑上思考这个问题。我在 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++;
}

这会产生我想要的东西(出发日期必须在其他人到达之前。

我也知道不能在逗留期间抵达。

谁能帮我解决这个问题?真的让我难过。我什至不一定需要看代码;一个伪代码甚至会受到赞赏。

4

1 回答 1

2

可用单位是没有冲突预订的单位。

冲突预订是指在所需出发时间之前到达(在或)之前以及在所需到达时间之后(在或之后)出发的预订。

这个逻辑是通过这样的查询实现的:

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
于 2013-10-26T19:26:49.987 回答