-1

検索システムを作ろうとしているのですが、phpのexplode()関数を使って入力文字列を分解して分解し、表のタイトル欄と説明欄のキーワードごとに検索したいのが難点です。単一のクエリ検索のために私がしたこと

 $result = mysql_query("SELECT `name` 
            FROM texts 
            WHERE (title LIKE '%".$query."%' OR description LIKE '%".$query."%' ) ") 
            or die (mysql_error()); 

今問題は、私がクエリを次のように書いていることです

   $query_search = explode(" ",$query);

現在、キーワードの数は不明であり、すべてのキーワードがタイトルに存在するか、すべてのキーワードが説明に存在するかを調べたいと考えています。私を助けてください 。

これは私が試したことです

   $query_string_title = NULL ;
  $query_string_desc = NULL ;
 for($i = 0 ; $i< count($query_search) ; $i++){
     if($i == 0){
         $query_string_title .= "LIKE '%".$query_search[$i]."%'";
         $query_string_desc .= "LIKE '%".$query_search[$i]."%'";
         }
     else{
    $query_string_title .= "AND ad_title LIKE '%".$query_search[$i]."%'"; 
    $query_string_desc .= "AND description LIKE '%".$query_search[$i]."%'"; 
     }
     }
        $result = mysql_query("SELECT `name` FROM texts 
                                   WHERE (ad_title ".$query_string_title." 
                                   OR description ".$query_string_desc.")
                                   or die (mysql_error()); 
4

1 に答える 1

0

私はあなたがやろうとしていることはこのようにできると思います:

$string = "foo john doe";

$where = 'WHERE ('. implode(') OR (',
    array_map(
        function ($word)
        {
            return 'title LIKE \'%'. $word .'%\' OR description LIKE \'%'. $word .'%\'';
        },
        explode(" ", $string))
    ) .')';

$query = "SELECT `name` FROM texts $where";

var_dump($query);

しかし、それはあなたの問題を解決するための理想的な方法ではないようです。他の人がすでに述べたように、全文検索を見てください。

幸運を :)

編集1:
エラーが発生した場合は、古いバージョンのphpを使用している可能性があるため、次のことを試してください。

function array_map_helper ($word)
{
    return 'title LIKE \'%'. $word .'%\' OR description LIKE \'%'. $word .'%\'';
}

$string = "foo john doe";

$where = 'WHERE ('. implode(') OR (', array_map('array_map_helper', explode(" ", $string)) ) .')';

$query = "SELECT `name` FROM texts $where";

var_dump($query);
于 2013-01-26T16:53:57.980 に答える