繁体   English   中英

拆分字符串以放入CodeIgniter Active Record SQL查询中

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM