2012-06-27 30 views
0

我試圖在我的網站上實現搜索表單。如何在codeigniter中搜索文本?

使用笨活動記錄和mysql我在我的模型執行以下功能:

$search_query = 'charge fees for project'; 

    function get_search_results($search_query){ 
      $data = ''; 

      $this->db->like('title', $search_query); 
      $this->db->or_like('content', $search_query);    

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

      foreach ($query->result() as $row) { 
       $data[] = array(
        'id' => $row->id, 
        'category' => $row->category, 
        'sub_category' => $row->sub_category, 
        'title' => $row->title, 
        'content' => $row->content, 
        'date' => $row->date 
       ); 
      } 

      return $data; 
    } 

在我的數據庫中,我有一個包含以下數據的行:

row->title - What fees does the website charge? 
row->content - We charges total fees. When your account is successfully project created. 

我的搜索查詢即使這些關鍵字出現在標題和內容中也不會返回結果。我如何讓我的搜索查詢挑出數據庫條目中的關鍵字並返回結果?

+0

'收取費用的project'不會出現整體的稱號也不內容。 –

+0

aaah ..好的。所以使用like,查詢需要作爲一個整體出現。應該將查詢以某種方式分解爲關鍵字? – hairynuggets

回答

2

運行查詢之前,您應該拆分​​變量。代碼:

$this->db->like('title', $value, 'after');

+0

感謝這就是我一直在尋找的東西,不要以爲你知道如何根據相關性對結果進行排序?猜猜即將創建我自己的搜索引擎的路徑。大聲笑 – hairynuggets

+0

你應該使用一個像獅身人面像現有的:http://sphinxsearch.com/。自己創建一個將需要更多的時間。 –

0

使用此指令仔細

$this->db->like('title', $search_query); 

你缺少第三個參數之後或之前提供。默認情況下它會做到這一點。 %my_string% 閱讀用戶指南。

$search_query_values = explode(' ', $search_query); 
$counter = 0; 
foreach ($search_query_values as $key => $value) { 
    if ($counter == 0) { 
     $this->db->like('title', $value); 
    } 
    else { 
     $this->db->or_like('title', $value); 
     $this->db->or_like('content', $value); 
    } 
    $counter++; 
} 
$query = $this->db->get('faq'); 

我建議使用LIKE只有word%以提高性能:

http://codeigniter.com/user_guide/database/active_record.html

+0

嗯..我怎麼才能讓它在內容中挑出那些單詞,而不是試圖將整個句子作爲一個整體呢? – hairynuggets

+0

$ this-> db-> like('title',$ search_query,after); // other before //請閱讀用戶指南或者您不會問這個問題 –