搜索查询

时间:2018-06-22 10:04:39

标签: php codeigniter

有没有解决方案,可以在查询中进行搜索。

示例:

我有一个简单的查询:

$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天)

3 个答案:

答案 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');
}