2

我正在使用 php、ajax 和 mysql 来制作自动完成功能,当用户开始输入他们学校的名称时,我使用 ajax 将他们输入到文本字段中的值发送到 php 函数。然后,该函数使用 like %string% 来查找与他们输入的内容相匹配的大学。我有几个问题。

例如,我的数据库中有 Cal Poly (California polytech):

加州理工州立大学-圣路易斯奥比斯波

但通常用户会输入 California Polytech,他们只会输入 Cal poly 或他们学校名称的短语。

但是当我输入“Cal Poly”时没有显示结果,我必须输入 california 才能显示 cal poly 学校。

这只是一个例子,其他学校也需要它。

有什么方法可以改进我的数据库查询,使其返回稍微相似的结果而不返回不相似的东西?

到目前为止,这是我的代码:

查询:

$(".input-college").keyup(function(){
    var d = $('#search-college-form').serialize();
    var v = $(this).val();
    if (v.length > 4) {
        $.ajax({
            url: '/colleges/search_college_names',
            data: d,
            type: "POST",
            success:function(data){
                $(".input-d-down ul").html(data);
            }
        });
    }

});

PHP

学院控制器

 public function search_college_names() {
        $search = $_POST['college-search'];
        $data['college_list'] = $this->College_Model->search_colleges($search);
        $this->load->view('inputs_views/search-college-dropdown', $data);
    }

学院模式

public function search_colleges($search) {
$query = $this->db->select()->from('collegenames')->like("names", $search)->get();
return $query->result_array();
}

请告诉我,我对使用 like%% 的搜索功能有点陌生

谢谢

4

1 回答 1

5

解决此问题的一种方法是用空格分割搜索字符串,然后AND在查询中分割它们。

例如,字符串"Cal poly"将导致查询,例如SELECT * FROM table WHERE name LIKE "%Cal%" AND name LIKE "%poly%".

如果您需要这是一个非常快速和智能的搜索,您应该查看Solr,但这对于您的问题可能是严重的矫枉过正。

于 2013-07-16T10:34:12.517 回答