mysql - 必须匹配 MATCH AGAINST mysql 中的所有单词

标签 mysql match-against

SELECT *,
MATCH (`text`) AGAINST ('my work involves for' IN BOOLEAN MODE) `score`
FROM `messages` WHERE MATCH (`must_match`) AGAINST ('my work involves for' IN BOOLEAN MODE)
ORDER BY `score` DESC

所以这里的用户输入是“我的工作涉及”

id   text                 must_match
---  ----                 ------
1    my work is to help   work,help
2    work involves help   involves,work

现在我想要结果,如果 mus_match 列的所有单词在用户输入中匹配 因此,从上一行我们的结果将是第二行

must_match 列将包含文本列中的单词

最佳答案

在花了很多时间之后,我无法为您的任务提出解决方案/解决方法。这背后的主要原因是您的表中有多值属性:must_match。它包含以逗号分隔的值,并且值的数量也未预定义。

首先,我会要求你通过this link为了实现在列中存储分隔列表的缺点。

id        text1         must_match
1   my work is to help  work
1   my work is to help  help
2   work involves help  involves
2   work involves help  work

现在,如果您能够在 1NF 中转换您的表并将 must_match 的多个值存储在多行中(如上所述),那么请继续阅读以寻求解决方案,如果不能,请评论背后的原因那个。

解决方案:

select id,text1,
MATCH (text1) AGAINST ('my work involves for' IN BOOLEAN MODE) as score
from t t1
where locate(must_match,"my work involves for") > 0
group by id
having count(*) = (select count(*) from t where id = t1.id);

注意如果id是一个主键,那么您可以使用textgroup by 列也是。

Click here for Demo

希望对您有所帮助!

关于mysql - 必须匹配 MATCH AGAINST mysql 中的所有单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47389603/

相关文章:

mysql - SQL比较几乎相等的记录

c# - 引导顺序不正确

mysql - 无法删除父项和子项

Mysql InnoDB 匹配前导通配符错误

mysql - 使用 MATCH ... AGAINST 优化 COUNT(*)

mysql - 使用 Mysql 的子查询(AGAINST 的参数不正确)

mysql - 有什么方法可以在 Propel (ORM) 中使用 match against statement 吗?

mysql - 当查询返回 0 行时,选择计数与选择语句性能

javascript - 我如何使用 javascript 变量在网站中输入文本?

php - 为什么 Fuelphp 生成不正确的查询