0

私はこれに答えることができる魔法使いがそこにいることを知っています...

500 を超えるワインを一覧表示する PHP/MySQL データベースがあります。Web 訪問者はフォームを使用して、ワイン名、国、ヴィンテージなどでデータベースを検索できます。

2 つの異なるクエリをテストしました。

私が使用したいものは、米国の国固有の検索を返すことを拒否しますが、スペイン、オーストラリア、イタリア、カナダ、チリ (または米国 - 私がテストしたもの) では問題ありません。

USA は、たまたま USA 製品と一致するワイン名ヴィンテージなどをユーザーが入力した場合にのみ表示されます。それ以外の場合は、米国が存在しないかのように扱います。

もう 1 つのコード (一番下のブロック) は、すべての USA 検索を返しますが、必要な複数の列/用語を検索しません。

  1. このコードは、米国の国別検索を検出しません

       $cob=mysql_real_escape_string($_POST['user-entry']);
    
    // remove the line below to prevent searching multiple terms
       $cob = '+' . str_replace(' ',' +',$cob);
    
      $sql = sprintf ( 
      "SELECT CSPC, Country, Producer, Wine, Year, Price,
      MATCH ( CSPC, Country, Producer, Wine, Year ) 
      AGAINST ( '&s' IN BOOLEAN MODE )  
      FROM winecellar WHERE 
      MATCH ( CSPC, Country, Producer, Wine, Year ) 
      AGAINST ( '%s' IN BOOLEAN MODE )", $cob, $cob ) . $pricerange;
    
  2. このコードは、米国の国別検索を検索します

      $cob=mysql_real_escape_string($_POST['user-entry']);
    
      $sql="SELECT ID, CSPC, Country, Producer, Wine, Year, Price 
      FROM winecellar WHERE
      ( CSPC LIKE '%" . $cob .  "%' 
      OR Country LIKE '%" . $cob ."%' 
      OR Producer LIKE '%" . $cob ."%' 
      OR Wine LIKE '%" . $cob ."%' 
      OR Year LIKE '%" . $cob ."%' )" . $pricerange;
    
    • MySQL サーバーのバージョン: 5.1.65-cll
    • 国 = varchar (20)
    • 国 = NULL いいえ
    • 全文索引: 国、生産者、ワイン、年

私の質問は、マルチターム コード (一番上のブロック) が USA を有効なクエリとして認識できない原因は何ですか?

どんな助けでも大歓迎です、ありがとうみんな。

クリス

4

1 に答える 1

3

FULLTEXTインデックスを使用しています。デフォルトの最小単語長は 4 です。3 文字の単語は無視されます。 デフォルトの変更については、こちらを参照してください。

于 2012-12-12T13:26:20.423 に答える