chillywilly:
二つ以上のキーワードの顧客を検索した場合、私は、MySQLの結果の2セットを返す必要があります。
1)一次結果:これらのキーワードの交差(のみすべてのキーワードに一致する項目)
2)二次の結果:キーワード(一部ではなくすべてのキーワードに一致する項目)の対称差/選言組合に一致するアイテム
私はBOOLEANモードを使用してクエリ#1を実行することができ+
、各キーワードの前に看板。私は残すことによって、両方の#1と#2を含むクエリを実行することができます+
記号をオフにしますが、私は#2で説明した目的の結果を取得する方法がわかりません。助言がありますか?
Booboo:
#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 |