2012-09-05 74 views
0

设置方法是,它将调出$term变量中多个单词的结果。 我希望它提取的结果只能匹配主要,次要,子列之间的$term范围内的所有单词。选择全文搜索结果

现在如果$term是:“Hello World”的它将从数据库结果:

id | main    | secondary  | sub 

01 | statements   | hello world | blah 
02 | hello    | what's up?  | anything here 
03 | life rocks   | worldwide web | anything else here 
04 | where in the world | she said hello | bleh

当我想仅仅是导致01和04拉起来,因为它们包含完整的$项你好和世界

这是我的代码。我试着在这里搜索,并在谷歌。但事实上,我不知道要寻找什么。我发现的全文搜索文件,我已经在这里做了。我还没有找到任何说如何拉取确切的结果。 (sprintf的是存在的,因为我想我需要的是能够在一个JSON响应退货吗?

$query = sprintf("SELECT id, main, secondary, sub, 
    MATCH(main, secondary, sub) AGAINST('". $term ."' IN BOOLEAN MODE) AS score 
    FROM list_genres 
    WHERE MATCH (main, secondary, sub) AGAINST('". $term ."' IN BOOLEAN MODE) 
    ORDER BY score DESC LIMIT 15"); 
+0

你想使用多个字词进行搜索? – Skatox

+0

我想要通过多列搜索多个单词。但是,如果两个单词在所有3列中的任何位置都找到,那么只能得出结果,但我并不是要匹配的完整$ term变量,而不是单独的每个单词。 ..但是有些时候只会使用1个单词。有时可能是3. – Dev

回答

0

你sentece是错误的,首先的sprintf()应接受作为参数,术语,并使用%S无论你想将其添加到SQL,也为多个单词,你需要为每个单词添加一个+

代码应该是这样的:

$term = '+' . str_replace(' ',' +',$term); // Remove this line if you don't want search multiple terms 
$query = sprintf("SELECT id,main,secondary,sub, MATCH(main, secondary, sub) AGAINST('&s' IN BOOLEAN MODE) as score 
    FROM list_genres WHERE MATCH (main, secondary, sub) AGAINST('%s' IN BOOLEAN MODE) 
    ORDER BY score DESC LIMIT 15", $term, $term); 
+0

这是有效的。谢谢。我有点困惑,为什么$ term在最后使用两次。那么在美元期限内每个单词会有一次?或者?认为它按我想要的方式工作,现在我只是想了解它。 – Dev

+0

我建议你阅读http://php.net/manual/en/function.sprintf.php它会有所帮助,我所做的就是把%s放到你想添加变量的每个地方(在这种情况下为$ term ),因为有2%si放两个词。 – Skatox

+1

aww ..好吧,现在有道理,我已经读过%s作为占位符,但它没有意义,我的想法是,为什么不只是使用你知道的变量。变量。哈哈。但是现在更有意义了,我会读到sprintf。谢谢。 – Dev

0

如果我没有记错,为BOOLEAN MODE默认操作为OR,在条件前添加+标志你要找的应该做的伎俩。

$term = "+Hello +World"