2011-12-15 73 views
1

我创建了一个使用PHP/MySQL布尔模式的全文搜索。它运行完美,相关性排名和索引分配给相关数据库字段。该数据库包含两个表:分配搜索结果到一个变量 - PHP的全文搜索布尔

业务 - >名称,描述,联系方式,地址,serialid

* SEARCH_TERMS * - >而言,querytime,date_searched,结果。

然后现在,我想所有的搜索结果,并将其分配给一个变量$结果)。此$结果将与术语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的新手,这是我的第一个应用程序。非常感谢你的帮助!

回答

0

您可以创建并保存$result到DB这样的:

/* 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(等$result_serialized)可以根据结果类型和数量是非常非常大的。确保你可以处理它。 search_term数据库表中的result字段必须是TEXT或更大的字符串数据类型列。

阅读一些关于serialize()unserialize()

+0

这帮了我很多人!非常感谢! – 2011-12-15 13:22:49