2016-06-23 65 views
2

我工作到酒店預訂系統,我目前正試圖選擇可用房間(不保留)。笨 - 選擇其中id不(另一個查詢結果)

Rooms DB Structure: 
ID 
ROOM NAME 
CAPACITY 

HOTEL RESERVATIONS DB STRUCTURE: 
ID 
CHECK_IN 
CHECK_OUT 
ROOMS 
... 

這是我當前的代碼:

function searchFreeRooms($data){ 
    $check_in = $data['fields']['check_in']; 
    $check_out = $data['fields']['check_out']; 
    $this->db->select("*"); 
    $this->db->from('core_hotel_rooms'); 
    $this->db->where("id NOT IN (select rooms,total_guests from res_hotel where check_in <= '$check_in' AND check_out >= '$check_in' OR check_in <= '$check_out' AND check_out >= '$check_out' OR check_in >= '$check_in' AND check_out <= '$check_out') "); 
    $query = $this->db->get(); 
    return $query->result(); 
} 

用戶可以預訂多間客房在一個時間,並預留房間ID是存儲在用逗號前分隔欄「房間」:2,3, 5

以我前,室中存在的該列不應該被顯示,但遇到麻煩,因爲被選擇逗號之前僅第一ID(室),例如:2,3,5->僅2被選擇和3,5仍然顯示在我的前面。

問題是在這裏:$this->db->where("id NOT IN (select rooms,total_guests from res_hotel where check_in <= '$check_in' AND check_out >= '$check_in' OR check_in <= '$check_out' AND check_out >= '$check_out' OR check_in >= '$check_in' AND check_out <= '$check_out') ");

我嘗試這樣做:$this->db->where("id NOT IN (1, 2) ");和它的作品完美,但不上法第二查詢。

對不起,我的英語...

非常感謝所有那些誰可以幫助!

回答

3

最後,我已經解決了我的問題!

工作代碼:

function searchFreeRooms($data){ 
    $check_in = $data['fields']['check_in']; 
    $check_out = $data['fields']['check_out']; 
    $query1 = $this->db->query("select rooms from res_hotel where (check_in <= '$check_in' AND check_out >= '$check_in') OR (check_in <= '$check_out' AND check_out >= '$check_out') OR (check_in >= '$check_in' AND check_out <= '$check_out')"); 
    $query1_result = $query1->result(); 
    $room_id= array(); 
    foreach($query1_result as $row){ 
    $room_id[] = $row->rooms; 
    } 
    $room = implode(",",$room_id); 
    $ids = explode(",", $room); 
    $this->db->select("*"); 
    $this->db->from('core_hotel_rooms'); 
    $this->db->where_not_in('id', $ids); 
    $query = $this->db->get(); 
    return $query->result(); 
} 

非常感謝!

0

這是您的問題的解決方案。希望這有助於:

function searchFreeRooms($data){ 
    $check_in = $data['fields']['check_in']; 
    $check_out = $data['fields']['check_out']; 

    $query1 = $this->db->query("select rooms from res_hotel where check_in <= '".$check_in."' AND check_out >= '".$check_in."' OR check_in <= '".$check_out."' AND check_out >= '".$check_out."' OR check_in >= '".$check_in."' AND check_out <= '".$check_out."'")->result_array(); 
    $room_id= array(); 
    foreach($query1 as $row){ 
    $room_id[] = $row->rooms; 
    } 
    $room = implode(",",$room_id); 

    $query = $this->db->query("select * from rooms where id not in (".$room.")"); 

     return $query->result(); 
    } 
+0

還不行,它選擇逗號之前只有第一ID ... – Idea13

1

考慮使用括號

$this->db->where("id NOT IN (select rooms,total_guests from res_hotel where (check_in <= '$check_in' AND check_out >= '$check_in') OR (check_in <= '$check_out' AND check_out >= '$check_out') OR (check_in >= '$check_in' AND check_out <= '$check_out')) "); 
+0

在phpMyAdmin運行第二個查詢的所有值 – C2486

+0

不工作! 我沒有在phpMyAdmin此查詢'其中id不在(選擇res_hotel其中CHECK_IN <= '2016年6月24日' 和CHECK_OUT> = '2016年6月24日' OR CHECK_IN <=「2016客房SELECT * FROM core_hotel_rooms -06-30' AND CHECK_OUT> = '2016年6月30日' OR CHECK_IN> = '2016年6月24日' AND CHECK_OUT <= '2016年6月30日')' 和它顯示我這些結果: id:1,2,4,5,這是錯的! ID:4應該從這裏刪除,因爲我有這個值在房間列:3,4, 當我運行第二個查詢只有結果是正確的值:3,4。 – Idea13

0
$result = $this->db->select('room') 
    ->get('your_table'); 

    foreach($result as $item) { 
     $array[] = $item['id'];   
    } 
    $a = implode(',', $array); 

$this->where_not_in('id', $a); 

做這樣的事情。

+0

'implode'實際上是不必要的,因爲'where_not_in'可以直接獲取數組。 – CollinD

+0

我曾嘗試用數組做這件事,但我得到了「數組到字符串的轉換」錯誤。 你能否向我提供你所說的代碼! –

+0

'$ this-> where_not_in('id',$ array)'就我所知,工作得很好 – CollinD

相關問題