按照设置的方式,它将调出$term
变量中多个单词的结果。我希望它能在主列、辅助列和子列之间调出只匹配$term
范围内所有单词的结果。
现在,如果$term
是:"Hello World",它将从数据库中提取结果:
id|main|secondary|sub01 |声明|你好世界|等等02|你好|怎么了?|这里有什么吗03 |生活震撼|万维网|其他内容04|她在世界何处打招呼|bleh
当我只想得到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");
你的句子是错误的,首先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);
如果我没有弄错,BOOLEAN MODE
的默认操作是OR
。在您要查找的术语前面添加+
符号就可以了。
$term = "+Hello +World"