【问题标题】:Need to populate an autocomplete with school names需要用学校名称填充自动完成
【发布时间】:2013-07-16 10:29:06
【问题描述】:

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

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

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

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

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

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

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

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

jquery:

$(".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%% 的搜索功能有点陌生

谢谢

【问题讨论】:

  • 你会如何考虑在没有编程的情况下解决这个问题。例如,您如何分解“cal poly”或“cal uni”以在字典中查找加州理工学院
  • 因为大学缩写差异很大(基于发音等),所以您无能为力,您可以在特殊情况下为您认识的人编程,但除此之外没有太多.
  • 另外,尝试将其与全文搜索结合起来。这将使您更好地控制查询中的用户输入
  • 为了更正一些可能的拼写错误,您可能需要查看php.net/manual/en/function.levenshtein.php
  • 您可以在常用名称上引入一个与您的主表连接的字段或第二个表。

标签: php mysql


【解决方案1】:

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

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

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

【讨论】:

  • 我在他的示例中没有看到 SQL 查询,是吗?
  • 他显然在使用一个构建器,该构建器很可能在最后生成 SQL。您当然可以使用该构建器创建上述查询,但我认为使用构建器创建该语句不会使答案更好。
  • 刚刚做到了,现在可以找到学校:) 现在我只需要弄清楚如何通过最相似的匹配对数据进行排序,然后限制结果,我很好,但我想我会接受这个。谢谢!
  • @cipherous 到目前为止,使用 ->sort() 和 ->limit()
猜你喜欢
  • 1970-01-01
  • 2016-02-08
  • 2014-04-05
  • 1970-01-01
  • 2022-06-14
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 2015-12-13
相关资源
最近更新 更多