大家好,搜索无效。例如,当您搜索Php或Ajax时,标签包含Php,Ajax,HTML 5,但是如果您搜索两个或更多单词,例如HTML 5则没有结果。
我的型号代码:
public function getTagsMatch($limit=null, $tags, $offset=null) {
$match = $tags;
$this->db->from('threads');
$this->db->where('status', 1);
$search_query_values = explode(' ', $match);
$counter = 0;
foreach ($search_query_values as $key => $value) {
if ($counter == 0) {
$this->db->like('tags', $value);
}
$counter++;
}
$this->db->order_by('pin_post', 'DESC');
$this->db->order_by('id', 'DESC');
$this->db->limit($limit);
$this->db->offset($offset);
$query = $this->db->get();
return $query->result_array();
}
答案 0 :(得分:2)
嗯...
$search_query_values = explode(' ', $match);
此行包含查询值和" explodes"使用空格的字符串。因此,如果您输入" HTML 5",它实际上会搜索像" HTML"等标签。或" 5"。考虑使用不同的角色进行爆炸。
例如:
$search_query_values = explode(',', $match);
函数调用将是这样的:
getTagsMatch(NULL, 'Ajax,HTML 5,PHP', NULL);
还有一些说明:
function foo(bar0, bar1=0, bar2='') { ... }
,而不是随机放置)。$tags
,$match
和 $search_query_values
- 一个就足够了。您可能会考虑使用3个变量作为语义优势,但它实际上会使您的代码更难以阅读。答案 1 :(得分:1)
问题出在我的控制器上,因为。我自定义标签,但事实是我有一个麻烦如何解释这个,因为我不善于解释这样的事情。我将发布一些代码并附上一些解释。
我的代码搜索将基于什么是标签slug,例如website.com/tags/html-5
所以我的控制器代码:
public function tags($tags) {
$tag = search_title($tags);
$data['result'] = $this->topic_model->getTagsMatch($tag);
}
和我的search_title功能代码:
function search_title($str, $separator = ' ') {
$str = ucwords(strtolower($str));
foreach (array('-', '\'') as $delimiter) {
if (strpos($str, $delimiter)!==false)
{
$str =implode($delimiter, array_map('ucfirst', explode($delimiter, $str)));
}
}
$str = str_replace('-',' ',$str);
$str = str_replace('%20',' ',$str);
$str = str_replace('%26','&',$str);
$str = str_replace('%27',' ',$str);
$str = str_replace('%28',' ',$str);
$str = str_replace('%29',' ',$str);
return trim(stripslashes($str));
}
问题就在这一行
$data['result'] = $this->topic_model->getTagsMatch($tag);
所以我将 $ tag 更改为 str_replace(“ - ”,“”,$ tags)