Codeigniter搜索查询组合关键字

时间:2014-11-18 23:43:01

标签: php sql codeigniter search

我想要一个搜索查询来返回与所有关键字匹配的结果,但我只能将其设置为匹配任何匹配字符串

即。 "蛋糕巧克力"或者使用" cake"返回所有记录或"巧克力"在标签字段中,或者使用确切标签"蛋糕巧克力"的结果,而不是我想要的,这是用" cake" AND"巧克力"。这就是我所拥有的:

$key = $this->input->post('searchTerm');
         if($key != ''){
        // if I comment out the next 10 lines, it becomes MATCH-ANY
           $this->db->or_like('product_name',$key);
           $this->db->or_like('product_code',$key);
           $this->db->or_like('description',$key);
           $this->db->or_like('season',$key);
           $this->db->or_like('year',$key);
           $this->db->or_like('photo_style',$key);
           $this->db->or_like('photo_status',$key);
           $this->db->or_like('extra_field1',$key);
           $this->db->or_like('extra_field2',$key);
           $this->db->or_like('additional_notes',$key); 
        // But if I comment out the next 7 lines instead, I match only the entire string.
        $Singlequry = "select  * from (select *,    concat_ws(' ',product_name,product_code,description,season,year,photo_style,photo_status,extra_field1,extra_field2,additional_notes) merged from records )temp where "; 
        $keywordsMany = explode(' ',$key);
        $tempQuery = array();
        foreach($keywordsMany as $each){
        $tempQuery[] = " temp.merged like '%".mysql_real_escape_string($each)."%'";
        }
        $Singlequry = $Singlequry.implode(' or ',$tempQuery);        // end of search type comment-out   
           $makeQuery = true;
         }

如果不明显,我真的不知道我在做什么。我抛出where_in和其他东西代替or_like,但没有运气。所有这些都说,我需要一点点手握:)

1 个答案:

答案 0 :(得分:0)

很遗憾,您无法使用codeigniter or_like生成此查询; 您当前的代码会像这样生成您的查询

SELECT * from tablename WhHERE product_name like '%key%' or product_code like '%key%' OR..............

只返回与键匹配的任何内容。

但我想你想要的所有比赛都应该是这样的

SELECT * from tablename WhHERE product_name like '%key%' AND product_code like '%key%' AND..............

如果是这样,您可以将or_like替换为where类似关注

 $this->db->where("product_name LIKE '%$key%'");
 $this->db->where("product_code LIKE '%$key%'");
 $this->db->where("description LIKE '%$key%'");

它将产生您期望的查询。它将返回与键匹配的结果 你也可以用其他许多方式做到这一点 希望它会对你有所帮助。