0

这是设置的方式,它将为$term变量中的多个单词提取结果。我希望它提取只匹配$term主列、辅助列、子列之间跨度内所有单词的结果。

现在如果$term是:“Hello World”,它将从数据库中提取结果:

编号 | 主要 | 中学 | 子

01 | 声明 | 你好世界| 废话
02 | 你好 | 这是怎么回事?| 什么都在这里
03 | 生命之石| 万维网| 这里还有什么
04 | 世界上哪里| 她说你好 | 呜呜

当我只想要结果 01 和 04 时,因为它们包含 Hello And 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");
4

2 回答 2

0

如果我没记错的话,默认操作BOOLEAN MODEOR. +在您要查找的术语前面添加符号应该可以解决问题。

$term = "+Hello +World"
于 2012-09-05T01:52:37.360 回答
0

你的句子是错误的,首先sprintf()应该接收作为参数,术语,并在你想将它添加到 sql 的任何地方使用 %s ,对于多个单词,你需要+为每个单词添加一个。

代码应该是这样的:

$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); 
于 2012-09-05T01:54:06.037 回答