我使用php,ajax和mysql来制作自动完成功能,当用户开始输入他们学校的名字时,我使用ajax将他们输入的值发送到文本字段到php函数。该函数然后使用类似%string%来查找与他们输入的内容相匹配的大学。我有几个问题。
例如我在我的数据库中使用Cal Poly(California polytech):
加州理工州立大学 - 圣路易斯奥比斯波
但通常用户会进入California Polytech,他们只会输入Cal poly或他们学校名称的短语。
但是当我输入“Cal Poly”时没有显示任何结果,我必须输入加利福尼亚才能显示cal poly school。
这只是一个例子,我也需要其他学校。
有没有办法改进我的数据库查询,使其返回甚至稍微相似的结果而不返回不相似的东西?
到目前为止,这是我的代码:
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();
}
请让我知道,我对使用像%%
的搜索功能有点新意由于
答案 0 :(得分:5)
解决此问题的一种方法是将搜索字符串拆分为空格,然后在查询中AND
。
例如,字符串"Cal poly"
会产生SELECT * FROM table WHERE name LIKE "%Cal%" AND name LIKE "%poly%"
之类的查询。
如果您需要将此作为真正的快速且智能的搜索,您应该查看Solr,但这可能会严重影响您的问题。