使用多个关键字触发数据库搜索结果

时间:2011-10-11 19:03:55

标签: php mysql html

我有一个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;
}

?>

目前,用户查询必须包含与问题字段完全相同的文本。我的问题是; 如何才能使这项工作成功触发多个关键字?

我希望你能理解我的问题

2 个答案:

答案 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);