1

データベースで「商品」、「説明」、「キーワード」の列を検索しようとしています。問題は、テーブルの「説明」または「キーワード」列にある単語を入力しても、「製品」列にない単語を入力すると、その結果が表示されないことです。テーブルの「製品」列にある単語を入力した場合にのみ、結果が表示されます。

AND ステートメントが意図したとおりに機能しているかどうかはわかりません。これらの 3 つの列内で、ユーザーが検索したものに「似ている」単語を検索し、関連性によって結果を並べ替えたいと考えています。どんな助けでも大歓迎です。

$search_exploded = explode(" ",$searchquery);

foreach($search_exploded as $search_each)
{
    $x++;
    if ($x==1)
        $construct .= "product LIKE '%$search_each%' AND description LIKE '%$search_each%' AND keywords LIKE '%$search_each%'";
    else
        $construct .= " OR product LIKE '%$search_each%' AND description LIKE '%$search_each%' AND keywords LIKE '%$search_each%'";
}

$sqlCommand = "SELECT * FROM Search WHERE $construct ORDER BY MATCH (product,description,keywords) AGAINST ('$searchquery') DESC";
4

2 に答える 2

0

このようなことをするときは、ロジックを分割してから、を使用してそれらを接着するのが好きimplode()です。何かのようなもの:

$searchTerms = explode(" ",$searchquery);

$clauses = array();

foreach ($searchTerms as $searchTerm)
{
    $subClauses = array();
    $columns = array("product", "description", "keywords");
    foreach ($columns as $column)
    {
        $subClauses[] = " $column LIKE '%$searchTerm%' ";
    }

    $clauses[] = "(" . implode(" OR ", $subClauses) . ")";
}

$query = implode(" AND ", $clauses);

この方法でロジックを理解しやすくなります。ここでは、次のように言っています。検索語ごとに、product列またはdescription列、あるいは列で一致するものが見つかる必要がありkeywordsます。

ここでそれが実行されています:http://eval.in/4335

于 2012-12-07T04:50:09.553 に答える