1

我正在尝试进行搜索查询以查看 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 语句中的单词,或者我只是缺少什么?

4

4 回答 4

2

您当前正在运行的查询正在检查特定短语,而不是检查任何指定的单词。

您需要执行以下操作:

$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)不考虑任何可能分隔单词的标点符号。

于 2013-07-01T18:47:48.917 回答
0

没有$this->db->like("terms", $match);方法吗?

请参阅http://ellislab.com/codeigniter/user-guide/database/active_record.html#like

于 2013-07-01T18:24:31.560 回答
0

我认为全文搜索是要走的路。发布的网址 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")');
于 2013-07-01T18:27:06.613 回答
0

试试这个:

$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();
}
于 2013-07-01T18:42:39.520 回答