我有一个简单的全文搜索查询:
SELECT *, MATCH(col1,col2,col3) AGAINST ('keywords' IN BOOLEAN MODE) AS relev FROM table1 ORDER BY relev DESC
从技术上讲这是可行的,但它也会返回相关性为0的结果。
我尝试使用:
SELECT *, MATCH(col1,col2,col3) AGAINST ('keywords' IN BOOLEAN MODE) AS relev FROM table1 WHERE relev > 0 ORDER BY relev DESC
但这告诉我这relev
是无效的列名。
有什么方法可以排除arelev
的结果而不必MATCH(..) AGAINST(..)
在WHERE
子句中再次使用吗?这样做基本上不会再次重复全文搜索并花费两倍的时间吗?
您可以改用having
子句:
SELECT t.*,
MATCH(col1, col2, col3) AGAINST ('keywords' IN BOOLEAN MODE) AS relev
FROM table1 t
HAVING relev > 0
ORDER BY relev DESC;
SQL(通常)不允许在WHERE
子句中使用列别名。但是,MySQL确实允许在HAVING
子句中使用它们(并非所有数据库都允许)。对于这种情况,这可能很方便。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句