2

複数の単語を検索しようとしています。私はすでに、データベーススキーマに FULLTEXT を追加しようとしました。

これは私が今持っているコードで、1 つの単語だけが結果を返します。

$term = $this->input->post('term');

$this->db->like('firstname', $term);
$this->db->or_like('lastname', $term);
$this->db->or_like('middlename', $term);

$query = $this->db->get('people');
$data['people'] = $query->result();
$this->load->view('people', $data);

「John」、「Doe」、「Smith」などの 1 つの単語を検索すると機能します。

しかし、「John Doe」または「John Doe Smith」を検索しようとしても、結果が返されません。

CodeIgniter の Active Record または "$this->get->query" を使用して、複数の単語を検索するにはどうすればよいですか。

4

2 に答える 2

5

これを試して:

$terms = explode(' ', $term);

foreach($terms as $term){
  $this->db->or_like('firstname', $term);
  $this->db->or_like('lastname', $term);
  $this->db->or_like('middlename', $term);
}


$query = $this->db->get('people');

編集:(あなたのコメントの後)

  $parts = substr_count(trim($term), ' ');

  switch($parts){
      case 0:
          $this->db->or_like('firstname', $term);
          $this->db->or_like('lastname', $term);
          $this->db->or_like('middlename', $term);
          break;
      case 1;
          $this->db->or_like('CONCAT(firstname, " ", middlename)', $term);
          $this->db->or_like('CONCAT(firstname, " ", lastname)', $term);
          $this->db->or_like('CONCAT(middlename, " ", lastname)', $term);
          break;
      case 2:
      default:
          $this->db->or_like('CONCAT(firstname, " ", middlename, " ", lastname)', $term);
          break;

  }

  $query = $this->db->get('people');
于 2012-08-26T12:32:36.470 に答える
1

単一の区切られたフィールドに対して like 文を実行するため、その結果が得られます。その代わりに、次のように、最初にフィールドを連結してから、結果に対してクエリを実行することができます。

$sql = "SELECT * FROM people WHERE CONCAT(firstname,' ', middlename,' ', lastname) LIKE '%$term%'";

$this->db->query($sql);
于 2012-08-26T12:44:47.490 に答える