0

我正在尝试在我的页面上实现一个搜索引擎,我想使用这些参数搜索票:

  1. 票号和/或
  2. 范围/关键字(票证描述中的任何单词或字符)和/或
  3. 在 2 个日期之间,开始日期和结束日期

我的模型中的搜索功能是这样的:

function search($id,$scope,$start_date,$end_date)
    {
        if (!empty($id) || !empty($scope)){
        $this->db->like('TROUBLE_ID', $id);
        $this->db->or_like('PROBLEM_DESCRIPTION', $scope);
        $this->db->where('ASSIGNED_DATE >=', $start_date);
        $this->db->where('ASSIGNED_DATE <=', $end_date); 
        $query = $this->db->get($this->db);
        return $query->result_array();
        }
        else {echo 'No results to display';}
    }

我的控制器功能:

function search_keyword()
    {           
        //Search Engine
        $id = $this->input->post('ID');
        $scope = $this->input->post('SCOPE');
        $start_date = $this->input->post('STARTING_DATE');
        $end_date = $this->input->post('ENDING_DATE');
        $data['results']    =   $this->rfi_model->search($id,$scope,$start_date,$end_date);
        $this->load->view('ticketSearchParameters',$data);

    }

和查看结果页面:

<?php
foreach($results as $row){
    $id = $row['TROUBLE_ID'];
?>
    <tr>
        <td><?php echo $row['TROUBLE_ID']?></td>
        <td><?php echo $row['ASSIGNED_DATE']?></td>
        <td><?php echo $row['CREATOR']?></td>
        <td><?php echo $row['PROBLEM_DESCRIPTION']?></td>
        <td><?php echo $row['RESOLUTION']?></td>
        <td><?php echo $row['RESOLVED_DATE']?></td>            
    </tr>

<?php
}
}
?>

但不知何故,搜索不正确,如果我将票号字段留空并且也没有过滤这两个日期之间的票,它就不起作用。任何想法?谢谢

4

2 回答 2

1

尝试使用调试

$this->db->last_query() 

然后直接在phpmyadmin中尝试该sql,这将帮助您找到问题..

于 2013-05-28T17:35:04.530 回答
0

我认为你有两个不同的问题。我对日期搜索不起作用的猜测是它们不是 yyyy-mm-dd 格式,这是 MySQL 比较需要的。

如果您将 ID 留空,它将不起作用,因为您没有将此行从您的空白 ID 条件中排除。

    $this->db->like('TROUBLE_ID', $id);

因此,如果您将空白 ID 留空,但始终包含该行,则您要求 MySQL 仅返回具有空白 ID 的行。

这是您可以解决它的一种方法。我为这个例子去掉了一个参数,因为如果你知道 id,你可能也不需要关键字,也可以使例子更简单。

function search($id_or_scope, $start_date, $end_date)
    {
        if (!empty($id_or_scope))
        {
          if (is_numeric($id_or_scope))
            $this->db->like('TROUBLE_ID', $id_or_scope);
          else
            $this->db->like('PROBLEM_DESCRIPTION', $id_or_scope);

          $this->db->where('ASSIGNED_DATE >=', $start_date);
          $this->db->where('ASSIGNED_DATE <=', $end_date); 
          $query = $this->db->get($this->db);
          return $query->result_array();
        }
        else {echo 'No results to display';}
    }
于 2013-05-28T17:47:04.237 回答