我有一个看起来像这样的数据库表:
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,我不会想。
如果不存在这样的功能,是否有更好的方法可以解决这个问题?
谢谢!
答案 0 :(得分:0)
documentation非常明确:
搜索字符串必须是查询期间常量的字符串值 评价。例如,这排除了表列,因为那样 每行可以有所不同。
因此,您无法通过查询执行所需操作。
您可以使用动态SQL。或者用PHP循环来遍历表中的模式。