0

只是为了便于理解:在“result”表中有一个名为“result_search”的列。其中一行是例如:“word letter sentence”。

如果我搜索这些单词中的任何一个,或者即使我搜索“word letter”或“letter sentence”,我的搜索效果也很好,但是当我将其混合并搜索“sentence word”或“letter word”时,没有显示任何结果.

我该如何解决?我假设我需要告诉搜索引擎自己搜索每个单词并只返回两个单词都存在的结果,但必须像它们在表格中一样彼此相邻?!这是我所拥有的:

<form action="search.php" method="GET">
    <input type="text" name="query" />
    <input type="submit" value="Search" />
</form>


<?php
    $query = $_GET['query'];          
    $min_length = 3;         
    if(strlen($query) >= $min_length){ 

        $query = htmlspecialchars($query);             
        $query = mysql_real_escape_string($query);

        $raw_results = mysql_query("SELECT * FROM result WHERE (`result_search` LIKE '%".$query."%')") or die(mysql_error());               

        if(mysql_num_rows($raw_results) > 0){ 

            while($results = mysql_fetch_array($raw_results)){                 
                echo "<p><h3>".$results['result_search']."</h3></p>";
            }

        }
        else{
            echo "No results";
        }

    }
    else{ 
        echo "Minimum length is ".$min_length;
    }
?>

谢谢您的帮助!

4

1 回答 1

1
$raw_results = mysql_query("SELECT * FROM result WHERE (`result_search` REGEXP '(".preg_replace('/\s+/', '|', $query).")')") or die(mysql_error());

preg_replace('/\s+/', '|', $query)将空格替换|为搜索条件中的每个单词OR

结果查询将是

SELECT * FROM result WHERE (`result_search` REGEXP '(word|letter)')

查询结果将是每个包含“单词”或“更好”的 racord

要获取包含两个字符串 REGEX 的记录,由于使用条件的“重复运算符操作数无效”错误,因此无法(?=.*使用AND

$sql = "SELECT * FROM result WHERE 1";
$matches = preg_split('/\s+/',$query);
foreach($matches as $match){
$sql .= " AND `result_search` LIKE '%".$match."%'";
}
$raw_results = mysql_query($sql) or die(mysql_error());

$matches = preg_split('/\s+/',$query);在找到空格的地方拆分。

于 2013-09-23T13:03:43.700 回答