2014-07-09 45 views
0

我有一个查询来搜索内容表中找到一些关键字行。(笨)如何查询像多个关键字

我有一个列来存储关键字(省名)。

我有一个主要省份和相关省份,我应该搜索它们。

我有一个关键字数组,并不清楚它有多少个索引。

所以,我怎么可以搜索包含多个关键字

的内容,这是我的模型查询

public function province($province_name,$provinces_name,$language) 
{ 
    $ps_name = str_replace("-", " ", $provinces_name); 
    $lang=$language; 

    $data = $this->db 
       ->select('*') 
       ->from('content') 
       ->where("language",$lang) 
       ->where("keywords",$province_name) 
       ->or_like("keywords","%$ps_name%") 
       ->limit("14") 
       ->order_by("id","DESC") 
       ->get(); 

    if ($data->num_rows > 0) { 
     return $data->result(); 
    } else{ 
     return false; 
    } 
} 

回答

0

如果您有关键字的数组,你想成为在一次搜索每个关键字,你可以在一个循环中使用$this->db->or_like()。尝试下面的代码:

$keywords = array("keyword1", 
        "keyword2", 
        "keyword3", 
      ); 

foreach($keywords as $k) 
{ 
    $this->db->or_like("keywords", $k); 
} 

$this->db->where("language", $lang); 
$this->db->limit("14"); 
$this->db->order_by("id", "DESC"); 
$query = $this->db->get("content"); 
+0

但我如何使用foreach进入查询? –

+0

- >选择( '*')\t \t \t \t \t \t - >从( 'noor_content')\t \t \t \t \t \t的foreach($ provinces_name为$ K) { - > or_like( “关键字”,$ķ ); } \t \t \t \t \t \t - >在哪里( “语言”,$ LANG) - >在哪里( “关键词”,$ province_name) - >限制( “14”) \t \t \t \t \t \t - > order_by(“id”,“DESC”) \t \t \t \t \t - > get(); –

+0

当前您正在使用链接方法来构建查询。您可以按照上面所做的来打破您的查询。循环遍历'or_like'将创建一个'or_like-wildcards-keyword'链。 –

0

不确定CI具体实现,但如果你正在做与搜索功能一样多个关键字你可以看看MySQL's full-text search(对于InnoDB或MyIASM)。或者一个不错的教程here