我有一个名为keywords
的字段,存储的信息是一个用|
分隔的关键字
例如:
sky|Banana is good|apple|apple is red|sky is blue|green
我想做的是在该字段中搜索并找到包含至少一个关键字的结果。
为此,我在BOOLEAN MODE中使用了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是我正在寻找的东西。
答案 0 :(得分: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
不匹配)。
如果您希望所有短语(而不是任何短语)出现,只需将OR
更改为AND
。