1

私はオンラインでこのチュートリアルを進めています: http://goo.gl/qnk6U

データベース テーブル: ajax_search

名 | 姓 | 年齢 | 出身地 | 仕事
-------------------------------------------
ジョー | ジョー | スミス | 35 | ボルダー | CIA   
スティーブ | りんご | 36 | デンバー | デンバー FBI

(年齢が int であることを除いて、型はすべて varchar です。)

私の質問。以下の sql select ステートメントは、"Joe 35" をクエリするために正しく記述されていますか? 何らかの理由で、「Joe」のみをクエリできますが、機能しますが、検索語を組み合わせることはできません。

$sql = "select * from ajax_search where FirstName like '%$rec%' or LastName like '%$rec%' or Age like '%$rec%' or Hometown like '%$rec%'";
4

2 に答える 2

1

クエリが「Joe 35」であると仮定すると、いいえ。クエリは、4 つのフィールドのいずれかに「Joe 35」が含まれる行 (単一フィールド内) と一致します。Joe という名前で年齢が 35 歳のユーザーをクエリするには、検索クエリを分割して次のようにする必要があります。

WHERE Firstname LIKE "$firstname" AND Age LIKE "$age"
于 2012-04-25T13:53:54.060 に答える
1

その文字列を検索クエリから分割する必要があります。

$columns = array("Firstname", "Lastname", "Age", "Hometown", "Job");
$string = ""; // acquire query string
$split = explode(" ", $string);
$search_words = array();
foreach ($split as $word) {
   $search_words[] = $word;
}

フィールド全体を検索するクエリを作成します。

$first = true;
$sql = "select * from ajax_search where";
foreach ($search_words as $word) {
   foreach ($columns as $col) {
      $sql .= (($first) ? " " : " OR") . "`$col` LIKE \"%" . $word . "%\"";
      $first = false;
   }
}

次に、このクエリを実行します。

別のより良い解決策は、より複雑な単語(タグ)ベースのインデックス作成です。これは、より多くの単語で使用すると病的なクエリが生成される可能性があるためです。

于 2012-04-25T13:59:56.683 に答える