2015-08-16 4 views
0

Я сделал запрос для поиска (максимум три слова), но его не очень полезно при увеличении числа слов, поэтому мне нужен код для п числа кодовPHP MySQL несколько слов поискового запроса

здесь my site

public function search() { 
      $s_keywords = $this->input->get('q');   
      $arr = explode(" ", $s_keywords); 

      if (count($arr) > 0) { 
       $query = $this->db->query("SELECT 
        vacancy_id, vc_title, vc_experience, vc_closedate, tbl_company_cmp_name 
        FROM tbl_vacancy 
        WHERE CONCAT(vc_title, ' ', tbl_company_cmp_name) = '$s_keywords' ");    
       $result = $query->result(); 

       return array('job_search' => $result,); 
      } 

      if (count($arr) == 1) { 
       $query = $this->db->query("SELECT vacancy_id, vc_title, vc_experience, vc_closedate, tbl_company_cmp_name FROM tbl_vacancy 
       WHERE vc_title LIKE '%{$s_keywords}%' OR tbl_company_cmp_name LIKE '%{$s_keywords}%' "); 
       $result = $query->result(); 

       return array('job_search' => $result,); 
      } else if (count($arr) == 2) { 
       $query = $this->db->query("SELECT vacancy_id, vc_title, vc_experience, vc_closedate, tbl_company_cmp_name FROM tbl_vacancy 
       WHERE (vc_title LIKE '%{$arr[0]}%' OR tbl_company_cmp_name LIKE '%{$arr[0]}%') " 
       . "AND (vc_title LIKE '%{$arr[1]}%' OR tbl_company_cmp_name LIKE '%{$arr[1]}%') "); 
       $result = $query->result(); 

       return array('job_search' => $result,); 
      } else if (count($arr) == 3) { 
       $query = $this->db->query("SELECT vacancy_id, vc_title, vc_experience, vc_closedate, tbl_company_cmp_name FROM tbl_vacancy 
       WHERE (vc_title LIKE '%{$arr[0]}%' OR tbl_company_cmp_name LIKE '%{$arr[0]}%') " 
       . "AND (vc_title LIKE '%{$arr[1]}%' OR tbl_company_cmp_name LIKE '%{$arr[1]}%') " 
       . "AND (vc_title LIKE '%{$arr[2]}%' OR tbl_company_cmp_name LIKE '%{$arr[2]}%') "); 
       $result = $query->result(); 

       return array('job_search' => $result,); 
      } 
     } 
+0

Вам нужно добавить гораздо больше деталей, как к тому, что вы ищете. –

+0

@ Ханонс, как? это моя модель для поиска (я использую codeigniter) –

ответ

2

Как вы можете see here вам нужно либо заявление или (как вы делали) или использовать REGEXP для вашего запроса.

В любом случае вам нужно создать строку запроса, а затем запустить запрос. Я бы перебирал каждое слово, например.

$query = 'SELECT vacancy_id, vc_title, vc_experience, vc_closedate, tbl_company_cmp_name FROM tbl_vacancy'; 
$wheres = array(); 

foreach ($arr as $keyword) { 
$wheres[] = "vc_title LIKE '%{$skeyword}%' OR tbl_company_cmp_name LIKE '%{$keyword}%' "; 
}; 

//join the where lines with 'AND' 
$where = join(' AND ', $wheres); 

$query = $query . ' WHERE ' . $where; 
//run the query 

$query = $this->db->query($query); 
$result = $query->result(); 
return array('job_search' => $result,); 

Точно так же вы можете построить регулярное выражение, мы не нуждаемся в Еогеаспе в этом случае мы имеем отдельные слова в массиве:

$regex = join('|', $arr); 
$query = 'SELECT vacancy_id, vc_title, vc_experience, vc_closedate, tbl_company_cmp_name FROM tbl_vacancy'; 

$where = " WHERE vc_title REGEXP '$regex' OR tbl_company_cmp_name REGEXP '$regex'"; 
$query = $this->db->query($query . $where); 
$result = $query->result(); 
return array('job_search' => $result,); 
0

Что-то вроде этого?

$arr = array("sads", "test", "do work"); 

$q = "SELECT vacancy_id, vc_title, vc_experience, vc_closedate, tbl_company_cmp_name FROM tbl_vacancy WHERE "; 
foreach($arr as $a) { 
    $q .= "AND (vc_title LIKE '%{$a}%' OR tbl_company_cmp_name LIKE '%{$a}%') "; 
} 

echo $q; 
Смежные вопросы