,如果用户输入'good',它会显示所有包含关键字'good'的结果。然而,如果用户输入“最好的最甜蜜”,则它不显示结果,因为没有两个词汇一起出现的记录;但出现在不同地方的入口处。在我的搜索表单中显示多个单词的搜索结果
例如,记录说:
一个很好的动作是一个不断剩余 店和纯产在“好”,它会显示这个
用户类型记录,但如果用户输入“好”+“纯”,则不会显示任何内容。或者如果记录中包含关键字“善行”,并且用户在没有连字符的情况下输入“好行为”,则不会显示任何内容。
我想要的是,如果用户输入'好'+'纯'或'好行为',则应该包含这些关键字的记录突出显示它们。
的search.php代码:
$search_result = "";
$search_result = $_POST["q"];
$search_result = trim($search_result);
//Check if the string is empty
if ($search_result == "") {
echo "<p class='error'>Search Error. Please Enter Your Search Query.</p>" ;
exit();
}
if ($search_result == "%" || $search_result == "_" || $search_result == "+") {
echo "<p class='error1'>Search Error. Please Enter a Valid Search Query.</p>" ;
exit();
}
$result = mysql_query('SELECT cQuotes, vAuthor, cArabic, vReference FROM thquotes WHERE cQuotes LIKE "%' . mysql_real_escape_string($search_result) .'%" ORDER BY idQuotes DESC', $conn)
or die ('Error: '.mysql_error());
function h($s) {
echo htmlspecialchars($s, ENT_QUOTES);
}
function highlightWords($string, $word)
{
$string = preg_replace("/".preg_quote($word, "/")."/i", "<span class='highlight'>$0</span>", $string);
/*** return the highlighted string ***/
return $string;
}
?>
<div class="caption">Search Results</div>
<div class="center_div">
<table>
<?php while ($row= mysql_fetch_array($result, MYSQL_ASSOC)) {
$cQuote = highlightWords(htmlspecialchars($row['cQuotes']), $search_result);
?>
<tr>
<td style="text-align:right; font-size:18px;"><?php h($row['cArabic']); ?></td>
<td style="font-size:16px;"><?php echo $cQuote; ?></td>
<td style="font-size:12px;"><?php h($row['vAuthor']); ?></td>
<td style="font-size:12px; font-style:italic; text-align:right;"><?php h($row['vReference']); ?></td>
</tr>
<?php } ?>
</table>
</div>
search.html:
<form name="myform" class="wrapper">
<input type="text" name="q" onkeyup="showUser()" class="txt_search"/>
<input type="button" name="button" onclick="showUser()" class="button"/>
<p>
<div id="txtHint"></div>
</form>
我的表类型是INNODB。 。不幸的是它说它不支持FULLTEXT。 – input 2010-05-01 20:58:51
在这种情况下,我建议你去看看http://stackoverflow.com/questions/1381186/fulltext-search-with-innodb,它完全处理如何解决这个问题。如果一个专门的搜索引擎(就像那篇文章中提到的那样)对你来说是不可能的,你可以做其他事情,比如使用触发器将你的InnoDB数据复制到MyISAM表并在该表上搜索,或者手动滚动你自己的解决方案分裂的内容和链接到正确的职位,如加布里埃尔建议。 – 2010-05-01 21:14:11
谢谢你的回答。决定继续使用php替代品。 http://www.acuras.co.uk/articles/2-php-multi-word-mysql-search-algorithm-and-output – input 2010-05-03 10:48:22