2013-07-02 157 views
0

我正在嘗試建立一個網站,該網站控制出租物業組合。網站所有者可以爲物業創建一個列表。該物業每晚有默認價格,但還包括設置特價的能力,例如8月。MySQL查詢加入

網站用戶可以進入網站並輸入日期範圍並搜索該時間段內可用的列表。我還需要在這個階段看看是否有特殊的價格來取代默認價格。

所以表我已經是:

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); 

這得到匹配在清單中的cols $面積關鍵字,所有的結果,但似乎完全忽略登記表。我已經嘗試過不用間隔,看看它是否有所作爲,它仍然只是返回任何匹配的$面積,並且看起來忽略了所請求的日期之間的預訂。

任何任何想法?

+0

您是否正在嘗試爲此創建存儲過程? – Novice

回答

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 
0

這是通過使用相關子查詢完成的。

SELECT li.id FROM listings li WHERE 
0=(SELECT COUNT(*) FROM bookings bo WHERE bo.listing_id=li.id 
AND bo.checkin="START DATE" AND bo.checkout="END DATE");