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

しかし、どういうわけか検索が正しく行われません。チケット番号フィールドを空のままにして、これらの 2 つの日付の間のチケットをフィルタリングしていないと機能しません。何か案が?ありがとう

4

2 に答える 2

0

あなたは2つの異なる問題を抱えていると思います。日付検索が機能しないというのは、MySQL が比較のために必要とする yyyy-mm-dd 形式ではないということです。

空白の ID の条件からこの行を除外していないため、ID を空白のままにすると機能しません。

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

そのため、空白の ID を空白のままにして、その行が常に含まれている場合は、MySQL に空白の ID を持つ行のみを返すように要求しています。

これは、それを解決できる 1 つの方法です。この例ではパラメーターを省略しました。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 に答える