2

私はphp、ajax、およびmysqlを使用してオートコンプリート機能を作成しています。ユーザーが学校の名前を入力し始めると、ajaxを使用して、テキストフィールドに入力した値をphp関数に送信します。次に、その関数は like %string% を使用して、入力したものと一致する大学を見つけます。いくつか問題があります。

たとえば、データベースに Cal Poly (California polytech) があります。

カリフォルニア工科大学サン ルイス オビスポ校

しかし通常、ユーザーは California Polytech と入力し、Cal poly または学校名の語句を入力するだけです。

しかし、「Cal Poly」と入力しても結果が表示されません。カリフォルニア州と入力して、cal poly school を表示する必要があります。

これは一例であり、他の学校にも必要です。

データベース クエリを改善して、類似していないものを返さずに、わずかでも類似した結果を返すようにする方法はありますか?

これまでの私のコードは次のとおりです。

Jクエリ:

$(".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

これを行う 1 つの方法は、検索文字列をスペースで分割ANDし、クエリでそれらを分割することです。

たとえば、文字列"Cal poly"は次のようなクエリになりますSELECT * FROM table WHERE name LIKE "%Cal%" AND name LIKE "%poly%"

これを本当に高速でスマートな検索にする必要がある場合は、 Solrを調べる必要がありますが、それはおそらくあなたの問題にとって深刻なやり過ぎです。

于 2013-07-16T10:34:12.517 に答える