2012-06-27 27 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 //请阅读用户指南或者您不会问这个问题 –