1

PHPとMYSQLコードを使用してデータベース全体を検索する必要があります。今のところ私が行ったことは

$mysearch = $_GET['search'];//the search query , for ex - best potato
$recepiesuisine_quer = mysql_query("SELECT * FROM addrecepie WHERE  MATCH (name,method,contributedby,ingredients,healthytip,cuisine) AGAINST ('".$mysearch."' IN BOOLEAN MODE) ");
// Here the MATCH contain all the columns of my table
             while($row = mysql_fetch_assoc($recepiesuisine_quer)) {
             echo" 
                <a href='recepie_detail.php?id=".$row['id']."&cuisine=".$row['cuisine']."' id='foodie1_title' class='span-7'>
                <div class='span-1'><img src='".$row['image']."' width='80'></div>
                <div class='span-5'>
                    ".$row['name']." ,<br /> ".$row['contributedby'].",<br /> ".$row['cuisine']." <br />
                </div>
                </a>
             ";
             }

私の検索は単一の文字に対しては正常に機能していますが、2つの文字を検索したい場合のように、たとえば:-Best Potatoは、次の結果を表示します。

  1. テーブル行の任意の場所にあるすべてのポテト。

  2. テーブル行のどこでもすべてベスト。

  3. テーブルの行のどこかにあるすべてのベストポテト。

最初に3番目の条件を表示し、その後1番目と2番目の結果が表示されるようにしたい。最も関連性の高いアイテムを最初に表示する必要があります。上記のクエリでは、私はそうすることができません。どのクエリを使用すればよいか教えてください。

4

2 に答える 2

0

常に変数をバインドしてください。バインドしないと、検索パラメータ値が一重引用符である場合にmysqlクエリが失敗します。

于 2012-06-07T05:17:35.187 に答える
0

このクエリを使用できます-

SELECT * 
FROM addrecepie 
WHERE  MATCH (name,method,contributedby,ingredients,healthytip,cuisine) 
       AGAINST ('".$mysearch."' IN BOOLEAN MODE) 
OR MATCH (name,method,contributedby,ingredients,healthytip,cuisine) 
       AGAINST (SUBSTRING_INDEX('".$mysearch."', ' ', 1) IN BOOLEAN MODE)
OR MATCH (name,method,contributedby,ingredients,healthytip,cuisine) 
       AGAINST (SUBSTRING_INDEX('".$mysearch."', ' ', -1) IN BOOLEAN MODE)  

このSUBSTRING_INDEX()関数は、単語をスペースで分割します。これは、1つのスペースを持つ2つの単語用です。TRIM()この関数も使用する必要がある場合があります。

于 2012-06-05T19:09:47.200 に答える