这有效;
SELECT MATCH('Col1', 'Col2') AGAINST('search query') AS Score, Col1, Col2, Col3
FROM my_table
WHERE
Col1 = 'something-1'
OR
Col2 = 'something-2'
OR
MATCH('Col1', 'Col2') AGAINST ('search query') HAVING Score > 2;
这不是;
SELECT MATCH('Col1', 'Col2') AGAINST('search query') AS Score, Col1, Col2, Col3
FROM my_table
WHERE
Col1 = 'something-1'
OR
Col2 = 'something-2'
OR
MATCH('Col1', 'Col2') AGAINST ('search query') HAVING Score > 2
AND Col3 = 'something3';
我不确定这是否会带回我想要的确切结果,尽管这是主要问题:如何使用 AND 进行匹配,最重要的是,使用(括号)有效地将事物链接在一起以优先考虑正确的混合;
(X = 1 OR Y = 2 OR MATCH('Col1', 'Col2') AGAINST ('search query') HAVING Score > 2) AND Z = 3
从到目前为止我对每种组合的测试来看,我还没有设法让它有效地工作。我正在尝试扩展当前仅使用 AND 和 OR 的复杂查询,以包含具有一定质量的 MATCH AGAINST 信息。
一定有一种正确的方法可以做到这一点,但我没有做得正确。
更新 1 有趣的是,当我实现建议的查询并首先使用 AND 语句时,如下所示;
Col3 = 'something3' AND
(
Col1 = 'something-1'
OR
Col2 = 'something-2'
OR
MATCH('Col1', 'Col2') AGAINST ('search query') > 2
);
那么这实际上会返回重复的结果。
最佳答案
看来你只需要
(
Col1 = 'something-1'
OR
Col2 = 'something-2'
OR
MATCH('Col1', 'Col2') AGAINST ('search query') > 2
)
AND Col3 = 'something3';
关于MySQL 全文搜索与查询匹配 AND OR Column1 = ABC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38770255/