2

検索クエリに問題があります。

'artist'&という名前の 2 つの列があります'title'。しかし、オートコンプリート機能の場合、誰かが入力している間にこれらの列を検索する SQL クエリが必要です。私が知っている非常に簡単な解決策は次のとおりです。

SELECT * FROM music WHERE artist LIKE '%".$term."%' OR title LIKE
'%".$term."%'

$term = テキストボックスの値

しかし、このクエリにはいくつかの大きな問題があります。'DJ Test'アーティストがで、タイトルが であるとしましょう'Amazing Test Song'。入力'DJ'するとうまくいきます。しかし、私が入力すると'DJ Amazing'. 検索結果はありませんでした。当然のことですが、それを修正する方法がわかりません。

しかし、それだけが問題ではありません。誰かが入力した場合'DJ Test - Amazing Test Song'、「-」を無視する必要があります。

私の質問は、「Amazing DJ Test」のようなものを入力して必要なものを返すことができる場合、検索クエリはどのように見えるかということです。

4

2 に答える 2

0

このようなことを試してください。

動作するはずだと思いますが、テストしていません。

    $terms = explode(' ', $term);

    foreach($terms as $term){

        $query  = SELECT * FROM music WHERE artist LIKE '%".$term."%' OR title LIKE '%".$term."%'

        return $query;

    }

うまくいけばうまくいくはずです

于 2013-10-29T20:20:31.367 に答える
0

検索文字列を単語に分割し、それらの単語をクエリに追加してルックアップ基準として追加する必要があります。

最初に、検索文字列からの個々の単語を含む配列を作成します。

$search  = 'DJ TEST Amazing Test Song';
$search_terms = explode(" ", $search);

次に、検索用語ごとにクエリを変更します。

foreach($search_terms as $search_term) {
     //append OR to query with $search_term
     $query .= "OR artist LIKE '%".$search_term."%' OR title LIKE '%".$search_term."%'";

}
于 2013-10-29T20:25:29.237 に答える