选择带有全文的搜索语句

时间:2012-09-05 01:42:40

标签: php mysql select

设置方式,它会提取$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拉起来因为它们包括Hello和World的完整$ term

这是我的代码。我试过在这里和谷歌搜索。但实际上我不知道该找什么。我发现的只是全文搜索文档,我已经在这里做了。我还没有找到任何说明如何得出确切结果。 (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");

2 个答案:

答案 0 :(得分:0)

如果我没弄错的话,BOOLEAN MODE的默认操作是OR。在您正在寻找的术语前添加+符号应该可以解决问题。

$term = "+Hello +World"

答案 1 :(得分:0)

你的感觉错了,首先 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);