繁体   English   中英

MySQL可选LEFT JOIN与MATCH

[英]MySQL Optional LEFT JOIN With MATCH

我有以下查询,它对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.com上执行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

您无法匹配不在同一FULLTEXT索引中的多个列。 来自http://dev.mysql.com/doc/refman/5.6/en/fulltext-restrictions.html

MATCH()列列表必须与表的某些FULLTEXT索引定义中的列列表完全匹配,除非此MATCH()在MyISAM表上是IN BOOLEAN MODE。 对于MyISAM表,布尔模式搜索可以在非索引列上完成,尽管它们可能很慢。

在你的特定情况下,你没有一个完全由(tb1.comment, tb2.comment)组成的索引 - 你可以 - 所以这场比赛不可能成功。

要使其工作,请创建一个链接到包含两个comment字段的表的第三个表,并将两个列编入索引,并在适当的JOIN执行匹配。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM