典型的MySQL FULLTEXT搜索如下:
SELECT * FROM table
WHERE MATCH(name) AGAINST("value")
ORDER BY MATCH(name) AGAINST("value");
是否有诀窍避免在MATCH(…) AGAINST(…)
和WHERE
部分重复此ORDER BY
?
答案 0 :(得分:2)
您可以将其放在select
中,并在having
和order by
子句中引用别名:
SELECT t.*, MATCH(name) AGAINST("value") as relevance
FROM table t
HAVING relevance > 0
ORDER BY relevance desc;
使用having
而不使用group by
是MySQL扩展。
编辑:如评论中所述,上述查询将对表执行全表扫描,而不是仅使用完整表索引来选择正确的行。当然,全表扫描仍然会使用全文索引,但它缺少这种索引的一部分(也许是重要部分)。