Php 我的搜索是有效的,但是如果使用了大量的单词,它会返回大量无关的内容

Php 我的搜索是有效的,但是如果使用了大量的单词,它会返回大量无关的内容,php,javascript,sql,Php,Javascript,Sql,我的搜索是有效的,但如果使用了大量的单词,它会返回大量无关的内容。任何关于如何将搜索定位到哪里的想法,如果搜索长短语,将得到更窄的结果,而不是更多的内容。这个功能我想可能是搜索每个文章标题的每个关键字,我不知道它有什么问题 function search_results($search_for) { $returned_results = array(); $where = ""; $search_for = preg_split('/[\s]+/', $search_for); $total

我的搜索是有效的,但如果使用了大量的单词,它会返回大量无关的内容。任何关于如何将搜索定位到哪里的想法,如果搜索长短语,将得到更窄的结果,而不是更多的内容。这个功能我想可能是搜索每个文章标题的每个关键字,我不知道它有什么问题

function search_results($search_for) {
$returned_results = array();
$where = "";

$search_for = preg_split('/[\s]+/', $search_for);
$total_search_words = count($search_for);

foreach($search_for as $key=>$search_term) {
    $where .= "`review_title` LIKE '%$search_term%'";

    if($key != ($total_search_words - 1)) {
        $where .= " OR ";
    }
}
$value = $_POST['search_value'];
$results = "SELECT * FROM `reviews` WHERE `review_referral` = '$value' AND $where";
$results_num = ($results = mysql_query($results)) ? mysql_num_rows($results) : 0;

if($results_num === 0) {
    return false;
} else {

    while($results_row = mysql_fetch_assoc($results)) {
        $returned_results[] = array(
                            'review_title' => $results_row['review_title'],
                            'review_body' => $results_row['review_body'],
                            'user_id' => $results_row['user_id'],
                            'user_firstname' => $results_row['user_firstname'],
                            'user_lastname' => $results_row['user_lastname'],
                            'review_id' => $results_row['review_id'],
                            'review_body' => $results_row['review_body'],
                            'review_referral' => $results_row['review_referral'],
                            'rating' => $results_row['rating'],
                            'review_date' => $results_row['review_date'],
                            'review_category' => $results_row['review_category'],
                            'review_url' => $results_row['review_url'],
                            'referral_category' => $results_row['referral_category'],
        );

    }

return $returned_results;

如果要缩小搜索范围,应使用AND而不是OR

if($key != ($total_search_words - 1)) {
    $where .= " AND ";
}

如果要使搜索返回所有可能的变化,但在顶部显示相关结果,则可以对结果进行排序,以在结果顶部显示具有和匹配的结果,或者使用数据库中更相关的特定字段(例如,在review_title字段中的搜索词比在review_body中的搜索词更重要)。在编写这样的自定义搜索时,如果您非常了解您的表,您可以很容易地将最佳结果放在列表的顶部,从而使您的搜索总体上更好。