4

現在、ユーザーからの入力に基づいてデータベース内の列を検索する単純な検索エンジンがあります。

$search = $_GET['search'];
$terms = explode(" ", $search);

        $sql = "SELECT * FROM people WHERE lname LIKE :search";
    $q   = $conn->prepare($sql) or die("failed!");
    $q->bindValue(':search',"%".$search."%",PDO::PARAM_STR);
    $q->execute();

 if ($q){

 //
 do something

 }

現在、全体として用語を検索しています。たとえば、「赤い机」は結果を返しますが、「机 赤」は何も返しません

何か案は?どんな助けでも大歓迎です!

編集:

それ以来、これに変更しました...

   $search = $_GET['search'];
   $terms = explode(" ", $search);

        $sql = "SELECT * FROM people WHERE MATCH (lname,fname) AGAINST  (:search IN BOOLEAN MODE)";
    $q   = $conn->prepare($sql) or die("failed!");
    $q->bindValue(':search',"%".$search."%",PDO::PARAM_STR);
    $q->execute(); 

今のところ問題なく動作しているようです。誰かがより良い解決策を提案できれば、とても感謝しています!

4

1 に答える 1

1

これは最善の方法ではないかもしれませんが、このような方法でうまくいくと思います。これを行うためのよりスマートな方法があるかどうかを知りたいです!

$search = $_GET['search'];
$terms = explode(" ", $search);

$sql = "SELECT * FROM people"
if(count($terms) > 0) {
  $sql .= " WHERE (lname LIKE '%:term_0%' OR fname LIKE '%:term_0%')";
  for($i = 1; $i < count($terms); $i++)
    $sql .= " AND (lname LIKE '%:term_" . $i . "%' OR fname LIKE '%:term_" . $i . "%')";
}

$q = $conn->prepare($sql) or die("failed!");

for($i = 0; $i < count($terms); $i++)
  $q->bindValue(':term_' . $i, $terms[$i]);
$q->execute(); 
于 2012-09-17T04:07:50.870 に答える