Назначить результаты поиска в переменную - PHP Fulltext Search Boolean - PullRequest
1 голос
/ 15 декабря 2011

Я создал полнотекстовый поиск в логическом режиме с использованием PHP / MySQL. Он работает отлично, с ранжированием по релевантности и индексом, назначенным для соответствующих полей базы данных. База данных содержит две таблицы:

бизнес -> имя, описание, контакт, адрес, серийный номер

* search_terms * -> условия, время запроса, дата поиска, результаты.

Тогда сейчас, Я хочу получить все результаты поиска и присвоить его переменной ( $ results ). Этот $ результат будет сохранен в таблице search_term вместе с условиями, querytime и date_searched.

Вот мой код (без результата $)

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, и это мое первое приложение. Большое спасибо за помощь!

1 Ответ

0 голосов
/ 15 декабря 2011

Вы можете создать и сохранить $result в БД следующим образом:

/* 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) может быть очень очень большим в зависимости от типа результатов ичисло.Будьте уверены, что вы можете справиться с этим.Поле result в таблице search_term DB должно быть столбцом типа данных TEXT или большего размера.

И читать о serialize()и unserialize()!

...