MySQL MATCH()AGAINST(),反向参数

时间:2016-10-27 11:48:51

标签: mysql pattern-matching match

我有一个看起来像这样的数据库表:

id|words|url  
1|+Word +Matching -Goodbye|/url-1  
2|+Redirect +Me|/url-2  
3|+Goodbye +Word|/url-3  

当用户键入搜索:"您好我正在匹配单词",我希望table.words字段被赋予'相关性'对该字符串得分,很像MATCH()AGAINST()函数,但参数反转。

实际上,我希望运行的查询将是:

SELECT id, words, url,
MATCH ("Hello I am matching a word") AGAINST (words IN BOOLEAN MODE) AS relevance  
FROM table
ORDER BY relevance DESC

但不幸的是,这不起作用。我可以在PHP中做一些事情,我创建一个函数来遍历每个包含/独占的单词,但我担心当表格大小增加时,这将非常慢。

为了把它绑起来,我希望查询在该实例中返回id:1,因为它包含" Word"和'匹配",并且不包括" Goodbye"。我应该指出,这些单词可以在字符串中的任何顺序,所以我不能真正使用LIKE,我不会想。

如果不存在这样的功能,是否有更好的方法可以解决这个问题?

谢谢!

1 个答案:

答案 0 :(得分:0)

documentation非常明确:

  

搜索字符串必须是查询期间常量的字符串值   评价。例如,这排除了表列,因为那样   每行可以有所不同。

因此,您无法通过查询执行所需操作。

可以使用动态SQL。或者用PHP循环来遍历表中的模式。