0

我正在尝试在我的网站上实现搜索表单。

使用 codeigniter 活动记录和 mysql 我在我的模型中执行以下功能:

$search_query = 'charge fees for project';

    function get_search_results($search_query){
            $data = '';

            $this->db->like('title', $search_query);
            $this->db->or_like('content', $search_query);               

            $query = $this->db->get('faq'); 

            foreach ($query->result() as $row) {
                $data[] = array(
                    'id' => $row->id,
                    'category' => $row->category,
                    'sub_category' => $row->sub_category,
                    'title' => $row->title,
                    'content' => $row->content,
                    'date' => $row->date
                );
            }

            return $data;
    }

在我的数据库中,我有一行包含以下数据:

row->title - What fees does the website charge?
row->content - We charges total fees. When your account is successfully project created.

即使标题和内容中都存在这些关键字,我的搜索查询也不会返回任何结果。我怎样才能让我的搜索查询来挑选数据库条目中的关键字并返回结果???

4

2 回答 2

2

您应该在运行查询之前拆分search_query变量:

$search_query_values = explode(' ', $search_query);
$counter = 0;
foreach ($search_query_values as $key => $value) {
    if ($counter == 0) {
        $this->db->like('title', $value);
    }
    else {
        $this->db->or_like('title', $value);
        $this->db->or_like('content', $value);
    }
    $counter++;
}
$query = $this->db->get('faq');

我建议使用LIKEonly withword%来提高性能。编码:

$this->db->like('title', $value, 'after');

于 2012-06-27T13:50:27.883 回答
0

小心使用本说明

$this->db->like('title', $search_query);

您缺少在第三个参数中提供 after 或 before 。默认情况下它会这样做。%my_string% 阅读用户指南。

http://codeigniter.com/user_guide/database/active_record.html

于 2012-06-27T13:32:48.817 回答