【发布时间】:2016-12-10 17:58:28
【问题描述】:
这行得通;
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';
我不确定这是否会带来我想要的确切结果,尽管这是主要问题:如何将 Match Against 与 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
);
那么这实际上返回了重复的结果。
【问题讨论】:
-
查询的结构应该如何?当我更改为以下查询时,出现错误 Unknown column 'Score' in 'where Clause':SELECT MATCH('Col1', 'Col2') AGAINST('search query') AS Score, Col1, Col2, Col3 FROM my_table WHERE (Col1 = 'something-1' OR Col2 = 'something-2' OR Score > 2 ) AND Col3 = 'something3';
-
我收回,我没有正确阅读你的陈述。如果您的语句多次返回数据,这很奇怪。如果您可以解释一下您实际上想要完成的内容,那将很有帮助,将第一条评论删除为不相关
-
想通了这一点,由于 JOIN 使用的是唯一字段,而不是主键字段 stackoverflow.com/questions/6352454/…,导致了重复
-
如果你不解释整个问题就很难回答:)
-
顺便说一句,永远不要在没有括号的情况下混合 OR 和 AND,因为你无法确定代码是如何解释的,所以非常危险