0

フィルター会社の部品番号を含む大規模なデータベースがあります。いくつかの製品は、同じような年とモデル番号を持っています。各部分のテキストキーワードセクションを検索するphpスクリプトがあります。

したがって、1997-1999 Honda Crf 250 090987 19.95の場合、キーワードは次のとおりです。1997 1998 1999 honda crf 250 090987

チュートリアルからコードを取得し、キーワードセクションでスペースで区切られたすべてのものを検索するように記述されています。問題は、リストの多くがホンダまたは同様の年のスプレッドを持っているということです。

結果を絞り込むためにphpを変更する方法を理解する必要があります。そのため、誰かが「1997ホンダ」と入力すると、すべてのホンダと'97が表示されず、1997ホンダのものだけが表示されます。

私はphpを初めて使用しますが、周りを見回しても理解できません。どんな助けでも完全に感謝されます。

これがphpです:

$keywords = $_GET['keywords'];
$terms = explode(" ", $keywords);
$query = "SELECT * FROM search WHERE ";

foreach ($terms as $each){
    $i++;
    if ($i == 1)
        $query .= "keywords LIKE '%$each%' ";
else
    $query .= "OR keywords LIKE '%$each%' ";

}


// connect
mysql_connect("localhost", "root", "root");
mysql_select_db("catalog");

$query = mysql_query($query);
$numrows = mysql_num_rows($query);
if ($numrows > 0){

    while ($row = mysql_fetch_assoc($query)){
        $id = $row['id'];
        $year = $row['year'];
        $manufacturer = $row['manufacturer'];
        $product = $row['product'];
        $partnumber = $row['partnumber'];
        $price = $row['price'];

        echo "<div id=\"results\">
        <div class=\"words\">$year</div><div class=\"words\">$manufacturer</div><div class=\"words\">$product</div><div class=\"words\">$partnumber</div>$price<br /></div>";
    }
}
else
    echo "<div class=\"no_results\"><center>No results found for \"<b>$keywords</b>\"</center></div>";


// disconnect
mysql_close();

?>

4

3 に答える 3

0

ANDすべてのキーワードが一致する必要があることを強制する代わりにクエリで使用しますOR。一致しない場合、1つのキーワード一致が常に結果を返します。それ以外では、アプリケーションの速度を低下させる可能性のあるコードで関連性のある作業を行う必要があります。

于 2012-09-27T23:15:57.693 に答える
0

興味深い問題。

私は2つのアプローチを考えました:

(1)データベース構造を制御できる場合は、WHERE(make ='Honda' AND Year IN(1997,1998,1999))および既に持っている「like」のもの(make / yearなし)を選択できます。ただし、モデル年を分離して、別々のフィールドにする必要があります。

(2)それ以外の場合、入力が常に「year(s)make [otherkeywords]」であると仮定できる場合、これを入力しているときにizurielが提案したことを実行できます。「AND」キーワード=「1997」ANDキーワード=「ホンダ」 'AND(「like」句の既存のリスト)」。

そうすれば、他のキーワードのいずれかまたはすべてを持っている1997年のホンダだけを手に入れることができます。

于 2012-09-27T23:21:49.930 に答える
0

データベースが大きい場合は、単語の最後に1つの記号のパーセンテージを使用することをお勧めします。また、またはの代わりに、クエリを制限します。

于 2012-09-27T23:25:35.433 に答える