我有以下查询,它针对 MySQL Innodb 数据库中的相同搜索词对两个不同表中的两列执行全文搜索;
SELECT Id,
MATCH (tb1.comment, tb2.comment) AGAINST (+'search term' IN BOOLEAN MODE) AS Relevance
FROM tbl1
LEFT JOIN tb2 ON tb1.Id = tb2.Id
WHERE MATCH (tb1.comment, tb2.comment) AGAINST (+'search term' IN BOOLEAN MODE)
HAVING Relevance > 0
如果我只对 tb1.comment 执行 MATCH,它工作正常并且我得到相关的搜索词,但我想对两个列执行它。
然而,因为另一个表对于 LEFT JOIN 是可选的,所以如果没有匹配的 ID,它不会返回任何内容。关于如何克服这个问题的任何想法?
最佳答案
我设法找出了以下似乎表现良好并给出我想要的结果的变通方法;
SELECT Id,
MATCH (tb1.comment) AGAINST (+'search term' IN BOOLEAN MODE) AS Relevance1,
MATCH (tb2.comment) AGAINST (+'search term' IN BOOLEAN MODE) AS Relevance2
FROM tbl1
LEFT JOIN tb2 ON tb1.Id = tb2.Id
WHERE (MATCH (tb1.comment) AGAINST (+'search term' IN BOOLEAN MODE)
OR MATCH ( tb2.comment) AGAINST (+'search term' IN BOOLEAN MODE))
HAVING (Relevance1+Relevance2) > 0
ORDER BY (Relevance1+Relevance2) DESC
关于MySQL 可选的 LEFT JOIN With MATCH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18666204/