0

送信された検索文字列が解析され、各重要な用語が配列に配置される検索スクリプトの一部に取り組んでいます。次に、配列は WHERE 句でループされ、MYSQL データベース内のいくつかの列が検索されます。サンプル SQL コードは次のとおりです。

$sql = "SELECT title, question, tag1, tag2, tag3, tag4, tag5 FROM question WHERE ";

while(list($key,$val)=each($split_stemmed)){
          if($val<>" " and strlen($val) > 0){
          $sql .= 
           "(title LIKE '$val%' 
          OR question LIKE '$val%' 
          OR tag1 LIKE '$val%' 
          OR tag2 LIKE '$val%' 
          OR tag3 LIKE '$val%' 
          OR tag4 LIKE '$val%' 
          OR tag5 LIKE '$val%') OR";
          }
}
          $sql=substr($sql,0,(strLen($sql)-3));
          $sql .= "GROUP BY q_id ORDER BY 
           ((title LIKE '$val%') + 
            (question LIKE '$val%') + 
            (tag1 LIKE '$val%') + 
            (tag2 LIKE '$val') + 
            (tag3 LIKE '$val%') +
            (tag4 LIKE '$val%') +
            (tag5 LIKE '$val%')) desc, title asc";

私が抱えている問題は、ORDER BY を正しく機能させることです。ORDER BY の目的は、クエリの結果を検索文字列のヒット数の多い順に並べることです。私の仮定は、何らかの方法で ORDER BY 句で配列を再度ループする必要があるということですが、これを行う方法や、その仮定が正しいかどうかはわかりません。そこにヘルパーはいますか?

おそらくmysqlの全文検索を使用してこれを簡単に実行できることはわかっていますが、使用されているテーブルはInnoDBであるため、現時点ではそれがオプションだとは思いません。

4

2 に答える 2