火柴。。AGAINST in where 和 order by 子句,但不在 select 中

MATCH..AGAINST in where and order by clause but not in select

提问人:Aloof aloof 提问时间:9/30/2022 更新时间:2/4/2023 访问量:97

问:

表 t 的 FTS 索引位于 上。我想根据与术语匹配的分数对行进行排序。但我不希望分数显示在结果中。col1, col2

我尝试了以下查询,但它给出了一个错误。

SELECT * FROM t WHERE MATCH(col1,col2) AGAINST(term1, term2) AS score ORDER BY score, col3

这里给出了一个错误。AS score

只有这似乎有效:

SELECT t.*, MATCH(col1,col2) AGAINST(term1, term2) AS score FROM t WHERE MATCH(col1,col2) AGAINST(term1, term2) ORDER BY score, col3

任何想法如何在 where 中使用查询并按子句排序而不在选择列表中使用它?MATCH..AGAINST

MySQL 数据库

评论

0赞 Shadow 9/30/2022
按子句的顺序重复表达式
0赞 Aloof aloof 10/3/2022
这是否意味着匹配..反对计算会为一行发生两次/三次,具体取决于我在查询中使用它的次数?
0赞 Shadow 10/3/2022
不幸的是,这是正确的。

答:

0赞 Aloof aloof 2/4/2023 #1

发布@Shadow的建议。

我们将不得不按子句的顺序重复该表达式。

SELECT * FROM t WHERE MATCH(col1,col2) AGAINST(term1, term2) ORDER BY MATCH(col1,col2) AGAINST(term1, term2), col3

这将重复计算 .MATCH(col1,col2) AGAINST(term1, term2)