0

我已经调用keywords了字段,并且存储的信息是一个用关键字分隔的关键字|

例如:

sky|Banana is good|apple|apple is red|sky is blue|green

我正在尝试做的是在该字段中搜索并找到包含至少一个关键字的结果。

为此,我在布尔模式中使用了 MATCH AGAINST

SELECT * FROM mytable 
WHERE MATCH(kewords) 
      AGAINST ('+sky is blue +Banana is good +otherword' IN BOOLEAN MODE)

但是结果出错了,例如它会选择包含+sky is blue一个单词的结果sky

我知道如何在 PHP 中解决这个问题,但我正在寻找 MYSQL 解决方案,我认为 Match AGAINST 是我正在寻找的。

4

1 回答 1

1

一种方法是使用LIKE,用分隔符围住搜索词:

SELECT * FROM mytable
WHERE CONCAT('|', keywords, '|') LIKE '%|sky is blue|%' OR
      CONCAT('|', keywords, '|')LIKE '%|Banana is good|%' OR
      CONCAT('|', keywords, '|') LIKE '%|otherword|%' 

这确保了搜索短语必须完全匹配(即sky is blue不匹配sky)。

如果您希望所有短语都存在(而不是任何短语),只需将 更改ORAND.

于 2018-09-01T07:48:16.277 回答