0

賃貸物件のポートフォリオを管理するウェブサイトを構築しようとしています。サイト所有者は、物件のリストを作成できます。プロパティには 1 泊あたりのデフォルト料金がありますが、8 月などの特別料金を設定する機能も含まれています。

サイトのユーザーは、サイトにアクセスして日付範囲を入力し、その期間に利用可能なリストを検索できます。その段階で、デフォルト価格に代わる特別価格があるかどうかも確認する必要があります。

だから私が持っているテーブルは次のとおりです。

listings
    id
    default_price
    etc...

bookings 
   id
   listing_id
   checkin
   checkout

special_prices
   id
   listing_id
   from
   to
   price

しかし、私は sql クエリが苦手で、入力された期間中に予約がなく、存在する場合は special_price を取得するリストに対してクエリがどのように見えるかを理解できません。

クエリの作成が簡単になる場合は、cakephp を使用しています。誰でも私を助けることができますか?

編集 やあみんな、私はまだこれを理解しようとしています.リクエストされた日付と衝突する予約のないリストを取得することに集中しています.その後、特別価格のものを整理します.

私が持っている瞬間:

$conditions = array(
    "AND" => array(
        "OR" => array(
                    "Listing.address_one LIKE" => "%".$area."%",
                    "Listing.address_two LIKE" => "%".$area."%",
                    "Listing.city LIKE" => "%".$area."%",
                    "Listing.postcode LIKE" => "%".$area."%",
                    "Listing.title LIKE" => "%".$area."%",
                    ),
                    )
                );

$this->Listing->bindModel(array('hasMany' => array('Booking' => array('conditions' =>array('Booking.checkin BETWEEN ? AND ?' => array($to, $from))))));
$data = $this->paginate('Listing', $conditions);
$this->set('data', $data);

これにより、Listing cols の $area キーワードに一致するすべての結果が取得されますが、Bookings テーブルは完全に無視されているようです。NOT BETWEEN を挿入して違いが生じるかどうかを確認しましたが、それでも $area に一致するものを返すだけで、要求された日付間の予約は無視されているようです。

誰でもアイデアはありますか?

4

2 に答える 2

1

これにはいくつかの方法がありますが、bookings テーブルを LEFT JOIN して null の結果を検索するのが 1 つの方法です。チェックイン = 予約日と仮定すると...

SELECT 
* 
FROM listings l
LEFT JOIN bookings b ON b.listing_id = l.id AND b.checkin BETWEEN YOUR START DATE AND YOUR_END_DATE
WHERE b.id IS NULL
于 2013-07-02T13:05:15.040 に答える