通过预订系统中可用单元的逻辑进行排序

时间:2013-10-26 19:08:44

标签: php mysql web logic

我正在开展一个项目,我需要找到可用的单位。相关信息如下:

包含字段ID,名称,所有者,地址,活动(布尔值),预订(布尔值)

的单位表

包含字段ID,单位(绑定到unit.id),来宾,价格,arrival_date,depart_date,checkedin(布尔值),checkout(布尔值),已清除(布尔值)

的预订表

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

产生我想要的东西(出发日期必须在其他一方到来之前。

我也知道,入住期间不能到达。

任何人都可以帮我解决这个问题吗?真的我难倒了。我甚至不一定需要看代码;甚至可以欣赏伪代码。

1 个答案:

答案 0 :(得分: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