Codeigniter在日期和更多参数之间搜索

时间:2013-05-28 17:23:32

标签: php codeigniter search

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

  1. Ticket#和/或
  2. 范围/关键字(故障单描述中的任何字或字符)和/或
  3. 在2个日期,开始日期和结束日期之间
  4. 我模型中的搜索功能如下:

    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
    }
    }
    ?>
    

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

2 个答案:

答案 0 :(得分:1)

尝试使用

进行调试
$this->db->last_query() 

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

答案 1 :(得分: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';}
    }