1

在搜索我的数据库时,我希望真正相关的结果(由我的布尔搜索返回的结果)排名,但同时我不希望完全省略一些不太相关(喜欢)的结果。

目前我的查询看起来像这样。

(SELECT *, MATCH (col1,col2,col3,col4) AGAINST (query* in boolean mode) AS score
FROM table where match(col1,col2,col3,col4) against (query* in boolean mode)
order by score DESC) 
   UNION (SELECT * from table where col1 like query 
          or col2 like query or col2 like query or col4 like query)

这将返回一个错误,指出给定的两个 select 子句具有不同数量的列。我理解这是因为在查询的第一部分中将“分数”作为列添加。
这个问题有解决方法吗?

4

1 回答 1

1

只需使用列别名将假列分数添加到第二个查询中即可。您不需要使用该值,但会使联合工作。例如:

(SELECT *, MATCH (col1,col2,col3,col4) AGAINST (query* in boolean mode) AS score
FROM table where match(col1,col2,col3,col4) against (query* in boolean mode)
order by score DESC) 
UNION (SELECT *, 50 as score from table where col1 like query 
or col2 like query or col2 like query or col4 like query)

您可以将 50 替换为您希望分配的任何默认分数。

于 2013-02-26T11:05:36.637 回答