2011-12-15 15 views
1

PHP/MySQLを使用してブールモードでフルテキスト検索を作成しました。関連性のランキングと関連するデータベースフィールドに割り当てられたインデックスで完全に実行されます。 、>名前、説明、連絡先、住所検索結果を変数に代入する - PHPフルテキスト検索ブール

* SEARCH_TERMS * serialid - -

ビジネス>用語、querytime、date_searched、結果を:データベースには、2つのテーブルが含まれています。

今すると

私はすべての検索結果を取得したいと変数$結果)にそれを割り当てられました。この$結果は、terms、querytime、およびdate_searchedと一緒にsearch_termテーブルに格納されます。ここで

は($結果なし)私のコードです

function search($term){ 
    $term = mysql_real_escape_string($term); 
    $startTime = microtime(true); 
    $query = mysql_query("SELECT *, MATCH (Name) AGAINST ('+$term*' IN BOOLEAN MODE) AS rel1, MATCH (Description) AGAINST ('+$term*' IN BOOLEAN MODE) AS rel2, MATCH (Keywords) AGAINST ('+$term*' IN BOOLEAN MODE) AS rel3 FROM business WHERE MATCH (Name,Description,Keywords) AGAINST ('+$term*' IN BOOLEAN MODE) ORDER BY (rel1*0.60)+(rel2*0.25)+(rel3*0.15) DESC") or die(mysql_error()); 
    $endTime = microtime(true); 
    $queryTime = substr($endTime - $startTime, 0,6); 
    if(mysql_num_rows($query) == 0){ 
     echo "<p>No results found for <i>". $term ."</i></p>"; 
    } 
    else{ 
     while($row = mysql_fetch_assoc($query)){ 
      echo "<h4><a href='viewBusiness.php?serial=" . $row['SerialId'] . "'>" . $row['Name'] . "</a></h4>"; 
      $desc = substr($row['Description'], 0,100); 
      $score = $row['rel1'] + $row['rel2'] + $row['rel3']; 
      echo "<p>" . $desc .". . .</p>"; 
     } 
     $numOfResult = mysql_num_rows($query); 
     echo "<hr/><p><b>" . $numOfResult ." </b>result(s) found within " . $queryTime . " seconds.</p>"; 
     $ip = $_SERVER['REMOTE_ADDR']; 
     $query2 = mysql_query("INSERT INTO search_term(Term, QueryTime, Ip) VALUES('$term', '$queryTime', '$ip')") or die(mysql_error()); 
    } 
} 

私はPHPでの初心者です、これは私の最初のアプリケーションです。助けてくれてありがとう!

/* Your code before the cycle... */ 

$result = array(); /* The array where to store results */ 
while($row = mysql_fetch_assoc($query)) { 
    /* Your code for printing, just as posted... */ 
    $result[] = $row; /* Store the result row in the array */ 
} 

/* The rest of your code, before second query... */ 

/* Serialize the result data and save it to database */ 
$result_serialized = mysql_real_escape_string(serialize($result)); 
$query2 = mysql_query(" 
    INSERT INTO search_term(Term, QueryTime, Ip, result) 
    VALUES('$term', '$queryTime', '$ip', '$result_serialized') 
") or die(mysql_error()); 

しかし、注意してください:あなたが作成して保存あなた$resultをDBには、このようにすることができます

答えて

0

$result(およびその$result_serializedは)結果の種類と数に応じて、非常に非常に大きなものとなります。あなたはそれを処理できることを確認してください。 search_term DBテーブル内のresultフィールドは、TEXTまたはより大きな文字列データタイプの列でなければなりません。

serialize()unserialize()を読んでください!

+0

それは私をたくさん助けました!どうもありがとうございます! –

+0

PHPのリファレンスを 'serialize()'と 'unserialize()'に追加しました。**これは**データベースからデータを読み戻すために**使用する必要があります。回答の投票番号の下に* tick *アイコンを使用して私の回答を受け入れてください。 –

関連する問題