只是为了让它易于理解:在表“result”中有一个名为“result_search”的列。其中一行是例如:“单词字母句子”。
如果我搜索这些单词中的任何单词,或者即使我搜索“单词字母”或“字母单词”,我的搜索效果也很好,但是当我将其混合并搜索“句子单词”或“字母单词”时结果显示。
我该如何解决这个问题?我会假设我需要告诉搜索引擎自己搜索每个单词并仅返回两个单词都存在的结果,但是它们就像在表中那样彼此相邻? 这就是我所拥有的:
<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;
}
?>
感谢您的帮助!
答案 0 :(得分: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)')
查询结果将是包含'word'或'better'
的每个racord要获取包含两个字符串REGEX的记录,由于(?=.*
条件使用AND
的'repeatition-operator operand invalid'错误,无法使用
$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);
在找到空格的地方拆分。