我正在开展一个项目,我需要找到可用的单位。相关信息如下:
包含字段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++;
}
产生我想要的东西(出发日期必须在其他一方到来之前。
我也知道,入住期间不能到达。
任何人都可以帮我解决这个问题吗?真的我难倒了。我甚至不一定需要看代码;甚至可以欣赏伪代码。
答案 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