-1

たとえば、「cat」を検索すると、「cat in the hat」など、「cat」という単語が含まれるすべてのタイトルが表示されます。

「cat hat」と入力すると、「cat in the hat」が返されるはずですが、「cat in the hat」を正確に検索し、「cat in the hat」を無視するため、クエリは空を返します。

検索した単語ですべてのタイトルを検索し、次の単語などに対してそれを行う、ある種の選択が必要です...そして...わかりません、ある種の大きなANDもの...

これまでのところ、私は次のようなもので遊んでいます:

$query = "SELECT title 
FROM books 
WHERE TITLE LIKE '%" . $search . "%' LIMIT 0,75;";

おそらく、検索入力を文字列の配列に分割し、それらのそれぞれを検索してからマージする、ある種の再帰関数が必要です。

アイデア?

4

4 に答える 4

1

MySQL 全文検索を探しています

于 2013-01-22T21:15:02.160 に答える
0
$query = "SELECT title 
FROM books 
WHERE TITLE LIKE '%" . $search1 . "%' AND LIKE '%" . $search2 . "%'  LIMIT 0,75;";

検索語ごとに AND 句を追加する必要があります。必要に応じて OR を追加することもできます。それらは異なる結果をもたらすでしょう。OR を使用するとより多くの結果が得られ、AND を使用するとより具体的な結果が得られます。

于 2013-01-22T21:14:37.370 に答える
0

1 つのフィールドに対してクエリを実行するだけの場合は、入力の配列を使用してこれを実行できるはずです。複数のフィールドの場合は、マップを使用して行う必要があります。

指摘したいことの 1 つは、これが疑わしいほど SQL インジェクションの標的のように見えることです。SQL クエリを文字列に連結するときは十分に注意してください。ユーザーが任意の SQL を実行できないように、最終結果をエスケープするかパラメータ化する必要があります。

于 2013-01-22T21:17:31.840 に答える
0

答え:

  1. 通常の記号と空白で $search を分割し、クエリを作成します

  2. MySql 全文検索を使用する

落とし穴: 完全な SQL テキスト検索はより良いオプションであり、より高速な結果が得られます。また、現在のクエリは SQL インジェクションに対して脆弱であることにも注意してください。これを回避するには、 mysqli::real_escape_stringを使用してください。

ありがとう

于 2013-01-22T21:19:36.603 に答える