我想要一个搜索查询来返回与所有关键字匹配的结果,但我只能将其设置为匹配任何或匹配字符串 。
即。 "蛋糕巧克力"或者使用" 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
,但没有运气。所有这些都说,我需要一点点手握:)
答案 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%'");
它将产生您期望的查询。它将返回与键匹配的结果 你也可以用其他许多方式做到这一点 希望它会对你有所帮助。