为了账号安全,请及时绑定邮箱和手机立即绑定

mysql查询的对称差异或析取联合

mysql查询的对称差异或析取联合

PHP
DIEA 2022-10-28 16:09:22
如果客户搜索两个或多个关键字,我需要返回两组 MySQL 结果:1)主要结果:这些关键字的交集(仅匹配所有关键字的项目)2)次要结果:匹配关键字的对称差/析取并集的项目(匹配部分但不是所有关键字的项目)我可以使用 BOOLEAN 模式执行查询 #1 +,每个关键字前都有一个符号。我可以通过关闭签名来执行包含#1 和#2 的查询+,但我不知道如何获得#2 中描述的所需结果。有什么建议么?
查看完整描述

1 回答

?
白衣非少年

TA贡献1155条经验 获得超0个赞

对于#2,您只需要以下组合:


WHERE MATCH(words) AGAINST('keyword1 keyword2 ... keywordN' IN BOOLEAN MODE)

AND NOT MATCH(words) AGAINST('+keyword1 +keyword2 ... +keywordN IN BOOLEAN MODE)

这将返回至少有一个关键字但不是全部的行。还是我误解了你的问题?


架构 (MySQL v8.0)


create table test (

  id int not null auto_increment primary key,

  words text not null,

  FULLTEXT idx (words)

  );


  insert into test(words)

     values('Arc Book Cow Dog'), ('Book Cow Fox'), ('Arc Book Cow Fox'), ('Book Cow');

查询 #1


SELECT *

FROM test

WHERE MATCH(words) AGAINST('Arc Fox' IN BOOLEAN MODE)

      AND NOT MATCH(words) AGAINST('+ARC +Fox' IN BOOLEAN MODE)

ORDER BY id;


| id  | words            |

| --- | ---------------- |

| 1   | Arc Book Cow Dog |

| 2   | Book Cow Fox     |


查看完整回答
反对 回复 2022-10-28
  • 1 回答
  • 0 关注
  • 100 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信