0

利用可能なユニットを見つける必要があるプロジェクトに取り組んでいます。関連情報は次のとおりです。

フィールド id、name、owner、addr、active(boolean)、booked(boolean) を持つユニットのテーブル

フィールド id、unit(unit.id に関連付けられている)、guest、price、arrival_date、depart_date、checkedin(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 に答える