设置方式,它会提取$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");
答案 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);