我有一个查询用于搜索关键字,但我也想搜索全文,所以我将其更改为全文搜索查询,但它不起作用。
旧查询工作正常:
$data = $this->db
->select('content.title,content.id,content.category,content.body,path')
->from('content')
->join('categories','content.category = categories.id')
->like('content.title', $searchterm)
->like('content.body', $searchterm)
->order_by("content.id","DESC")
->get();
这是我对全文搜索的新查询:
$data = $this->db
->select('content.title,content.id,content.category,content.body,path')
->from('content')
->join('categories','content.category = categories.id')
->where('MATCH (content.body, content.title) AGAINST ("'. $searchterm .'")')
->order_by("content.id","DESC")
->get();
答案 0 :(得分:3)
其中()有3个参数,例如:
$this->db->where('MATCH (field) AGAINST ("value")', NULL, FALSE);
$this->db->get('table');
match()
中的多个列触发错误号码:1191,因此将它们分开:
->where('MATCH (content.title) AGAINST ("'. $searchterm .'")')
->where('MATCH (content.body) AGAINST ("'. $searchterm .'")')
答案 1 :(得分:0)
尝试更改查询中的where
子句,看看是否有帮助:
->where('MATCH (content.body, content.title) AGAINST ("'. $searchterm .'")', NULL, false)
这会将值设置为NULL
并告诉CI不要转义字符串。
答案 2 :(得分:0)
你没有使用正确的mathch ....语法 试试这个:
->where MATCH (content.body, content.title) AGAINST ("'. $searchterm .'") > 0
答案 3 :(得分:0)
如果您有多列,则可以像这样在一行中使用它们:
->where("MATCH(title, model) AGAINST('$text')", null, false);
或仅一列:
->where("MATCH(title) AGAINST('$text')", null, false);
不要忘记转义您的输入。因为我们禁止在那边用假冒来逃避。使用它进行转义:
$text = $this->db->escape_str($text);