选择包含全文的搜索语句


Select search statement with full text

按照设置的方式,它将调出$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"