2016-06-23 66 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

相关问题