2011-05-01 103 views
2

我已经搜索了类似的问题,回答并帮助我,但我找不到。所以,我的问题是,如何编写MySQL查询拉从数​​据库,其中包含了另一个句子生成的关键字,像这样的句子:Mysql查询,选择一个匹配关键字列表的句子

$tyrsena = "php statement for clause"; 
$ques = "SELECT * FROM question WHERE title IN '$tyrsena'"; 
$re = mysql_query($ques)or die(mysql_error()); 
while ($da = mysql_fetch_assoc($re)){  
     $sugg = $da['title']; 
     echo $sugg; 
} 

所以$tyrsena是从我需要生成的句子关键字,我想匹配question表中与这些关键字匹配的标题。
我提出的代码不起作用,只有当它与100%相同时,它才与Sentece匹配,我只是想象我想实现的目标。谢谢你们:)

回答

6

首先,它听起来像你需要你的桌子上创建一个 “FULLTEXT” 指标,并使用MATCH( )函数在你的查询中。

待办事项StackOverflow上搜索以下两个标签和细读,涉及到这个问题和答案:

  • MySQL的
  • 全文搜索

而且你必须将源语句标记为单词列表,以便它适合插入到查询中。天真的策略是在空格上分割,并且对于每个结果词,删除任何尾随的标点并将其全部转换为小写。 (例如,这保留“点”)。你也可以去掉任何“'s”(撇号“s”)和“not”以及类似的常见缩略词。 (一种较不天真的方法可以做到stemming

通常情况下,你也可以过滤掉任何“停用词”(这些词在英语句子中非常常见,在关键词搜索中具有任何价值:of,a,an ,...,等,...,等等(你应该能够通过简单的网络搜索很容易地找到两三百个推荐英语stop words的列表)(有些被列在最下面的那个维基百科的文章

+0

Mysql为全文搜索内置了停用词列表,正如在ft_stopword_file中定义的那样,短于ft_min_word_len的词也被忽略。人们经常禁用这些设置,特别是对于诸如标题的短字符串,否则发现例如“让它成为”将是不可能的。 – piotrm 2011-05-01 19:04:53

+1

感谢您的回答,帮助了我很多,现在我正在调整全文搜索。谢谢 :) – hayllone 2011-05-01 19:37:47

1

尝试用:

$tyrsena = "php statement for clause"; 
$tyrsena = explode(' ', $tyrsena); 
$tyrsena = implode("','", $tyrsena); 
$ques = "SELECT * FROM question WHERE title IN '$tyrsena'"; 

或更快:

$tyrsena = "php statement for clause"; 
$tyrsena = str_replace(" ", "','", $tyrsena); 
+0

当我运行这个查询(第一种方式)时,它会带来一个错误:'你的SQL语法有错误;查看与你的MySQL服务器版本相对应的手册, php','statement','for','clause''in line 1' – hayllone 2011-05-01 18:55:44

+0

'$ ques'的输出是什么? – hsz 2011-05-01 18:58:37

+0

'$ re = mysql_query($ ques)或死(mysql_error()); while($ da = mysql_fetch_assoc($ re)){ $ sugg = $ da ['title']; echo $ sugg; }' – hayllone 2011-05-01 19:00:34