[英]Splitting a string to put into a CodeIgniter Active Record SQL query
我正在尝试进行搜索查询,以查看textarea是否包含一些关键字。 我将textarea的值插入查询中时遇到了麻烦。
这是我的查询:
$match = $this->input->post('wStory');
$this->db->where("`terms` LIKE '%$match%'");
$query = $this->db->get('filter_tbl');
return $query->num_rows();
$match
是我的文本字段,我一直想做的是将里面的单词分开,然后遍历每个单词。 我试过使用PHP的explode()
函数进行某种工作,但是在这种情况下,它不起作用,因为它将字符串转换为数组。
有什么方法可以将文本区域中的字符串拆分成单词,然后遍历like语句中的单词?还是我缺少某些东西?
您当前正在运行的查询正在检查特定短语,而不是检查任何指定的单词。
您需要执行以下操作:
$match = $this->input->post('wStory');
// break search phrase into keywords
$keywords = explode(' ', $match);
// Build query
foreach ($keywords as $keyword)
{
$keyword = trim($keyword);
$this->db->or_where("`terms` LIKE '%$keyword%'");
}
$query = $this->db->get('filter_tbl');
return $query->num_rows();
explode(' ', $match)
不考虑可能分隔单词的任何标点符号。
是否没有$this->db->like("terms", $match);
方法?
参见http://ellislab.com/codeigniter/user-guide/database/active_record.html#like
我认为全文搜索是必经之路。 Rob W发布的网址也给出了以下信息:
$this->db->where('MATCH (field) AGAINST ("value")', NULL, FALSE);
在您看来,这就像
$this->db->where('MATCH (terms) AGAINST ("$match")', NULL, FALSE);
编辑:进一步阅读后,这可能会更好(或至少可读性更好):
$this->db->where('MATCH (terms) AGAINST ("$match")');
尝试这个:
$match = $this->input->post('wStory');
//Getting words from textarea and put them into array
$wordsArray = explode(' ',$match);
if (!empty($wordsArray)) {
//use where_in() instead of where()
$this->db->where_in("`terms`", $wordsArray);
$query = $this->db->get('filter_tbl');
return $query->num_rows();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.