在codeigniter activerecord中添加条件where子句

时间:2014-07-11 19:56:47

标签: mysql codeigniter activerecord codeigniter-2

我正在尝试构建一个查询来搜索在Codeigniter中开发的网站中的可用酒店。 我有两个单独的表,“酒店”用于存储酒店详细信息,“日历”用于存储日期和可用性。
“酒店”表有id,hotel_title,详情
“日历”表有id(酒店ID),日期,状态(已预订/可用)

以下是我在特定日期获取酒店的代码

if($this->input->get('date')){
    $this->db->where('calendar.date' , $this->input->get('date'));
    $this->db->where('calender.status !=' , 'booked');
}
$this->db->select('hotels.id , hotels.title, hotels.details');
$this->db->from('hotels');
$this->db->join('calender' , 'hotels.id = calendar.id' , 'left outer');
$this->db->get()->results();

假设有一家酒店于2014-07-25预订,并于2014-07-26预订。 当我们搜索2014-07-25时,它们没有出现在结果中,当我们搜索2014-07-26它出现时。问题是,如果某个日期的日历表中没有保存状态,我希望该酒店可用(显示在结果中),例如,如果我在2014-07-27搜索该酒店(那里)是没有行保存它“日历”有这个特定酒店的日期和ID),它没有出现在结果中。
我将不胜感激任何建议 感谢

1 个答案:

答案 0 :(得分:0)

只需在join on子句条件中替换where条件。

if($this->input->get('date')){
   $this->db->join('calender' , 'hotels.id = calendar.id AND calendar.date={$this->input->get('date')} AND calender.status != "booked"' , 'left outer');
}else{
  $this->db->join('calender' , 'hotels.id = calendar.id' , 'left outer');
}

这是示例代码。根据您的需求改变