MySQL 可选的 LEFT JOIN With MATCH

标签 mysql full-text-search left-join innodb

我有以下查询,它针对 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/

相关文章:

php - 每周使用 PHP 归档 MySQL 数据

python - 要求已经满足 : mysql-python in/usr/local/lib/python2. 7/site-packages

php - 第二个 MySQL 查询不工作

php - 在前端创建单选按钮 (PHP)

mysql - 使用 2 个表中的数据对列进行全文搜索

postgresql - 是否可以在 postgresql 上的 FTS 中组合多个文本搜索配置?

sql - 为什么我可以在 NULL 列上从左连接中选择一些东西?(用人为的例子在本地重现它,可能是一个错误!)

ios - iOS:如何避免在搜索栏中输入特殊字符?

mysql - 将 not in 替换为左连接

php - 将 MYSQL 数据库中的多行元信息组合到一个响应中