我有一个PHP搜索脚本,可以搜索MySQL数据库来回答问题。目前我的数据库就像这样......
id
问题 =时间是什么回答 =时间是12:00
然后将此数据发送到我的PHP代码:
<?php
mysql_connect("localhost","username","password");
mysql_select_db("database");
if(!empty($_GET['q'])){
$query=mysql_real_escape_string(trim($_GET['q']));
$searchSQL="SELECT * FROM questions WHERE `question` LIKE '%{$query}%' LIMIT 1";
$searchResult=mysql_query($searchSQL);
while($row=mysql_fetch_assoc($searchResult)){
$results="{$row['answer']}";
}
echo $results;
}
?>
目前,用户查询必须包含与问题字段完全相同的文本。我的问题是; 如何才能使这项工作成功触发多个关键字?
我希望你能理解我的问题
答案 0 :(得分:1)
我认为完整的测试搜索索引可以提供帮助 http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html SOUNDEX函数在此上下文中也很有用。 您可以将查询拆分为关键字并生成动态SQL但效率低(性能问题SQL注入攻击)请参阅http://php.net/manual/en/function.split.php
替代方法是添加表QUESTION_KEYWORD(QUESTION_ID,KEYWORD),拆分问题并搜索此表以查找最佳QUESTION_ID,但全文搜索索引更有效。事实上,全文搜索索引使用类似的数据结构来优化测试搜索。
答案 1 :(得分:0)
根据您的评论进行简单的快速修复,您可以做一些简单的事情:
// Assuming query string is ?q=make,sponge,cake
$searchSQL="SELECT * FROM questions WHERE ";
$count = 0;
foreach (explode(',', $_GET['q']) as $query) {
$searchSQL .= "`question` LIKE '%" .mysql_real_escape_string(trim($query)) . "%' ";
if ($count++ > 0) {
$searchSQL .= ' OR ';
}
}
$searchSQL .= ' LIMIT 1';
$searchResult = mysql_query($searchSQL);