有没有解决方案,可以在查询中进行搜索。
示例:
我有一个简单的查询:
$this->db->where('start >=',time());
$this->db->where('end <=',strtotime("+1 month"));
$result = $this->db->get('bookings');
然后我希望它能够进行类似于上面查询的搜索,但是不会在数据库中搜索,而是在$ result结果中搜索。
因此应该可以执行以下操作:
$where = array(
'start >=' => time(),
'end <=' => strtotime("+1 day")
);
$get_result_info_by_search = $this->Search_model->get_stored_results($result, $where);
希望有道理。 目的是减少对数据库的调用次数,因为我的时间间隔始终是相同的(我遍历一个日期范围,并进行相同的调用,例如31次(如果是31天)
答案 0 :(得分:1)
通过遍历行并测试“开始”和“结束”值,可以很容易地做到这一点。
/**
* @param CI_DB_result instance $result
* @param array $where with two keys, 'start' and 'end', containing timestamp values, ie.
* $where = ['start' => time(), 'end' => strtotime("+1 month"));
* @return mixed An array of db row objects or NULL if nothing matches
*/
public function get_stored_results($result, $where)
{
$rows = $result->result();
foreach ($rows as $row)
{
if($row->start >= $where['start'] && $row->end <= $where['end'])
{
$matches[] = $row;
}
}
return isset($matches) ? $matches : NULL;
}
如果您希望返回一个行数组
public function get_stored_results($result, $where)
{
$rows = $result->result_array();
foreach ($rows as $row)
{
if($row['start'] >= $where['start'] && $row['end'] <= $where['end'])
{
$matches[] = $row;
}
}
return isset($matches) ? $matches : NULL;
}
答案 1 :(得分:0)
可能会帮助您 在您的控制器中
$get_result_info_by_search = $this->Search_model->get_stored_results('start','end',$starttime,$endtime);
在您的搜索模型中
function get_stored_results($where1,$where2,$value1,$value2)
`{
答案 2 :(得分:0)
可能会在您的模型中适合您尝试添加此代码
function get_stored_results($where)
{
foreach($where as $key => $value)
{
$this->db->where($key,$value);
}
$result = $this->db->get('bookings');
}