首页 > 解决方案 > INNODB FULLTEXT 使用 JOIN 搜索:不同表上的搜索词

问题描述

我曾经使用以下查询MyISAM

SELECT *, table2.columnx 
FROM table1 
    LEFT JOIN table2 ON table1.columnx_id = table2.id 
WHERE MATCH(table1.columny, table2.columnx) AGAINST("+key* +word*" IN BOOLEAN MODE);

FULLTEXT将对多个表进行搜索。

现在,我切换到INNODB并收到以下错误消息:

一般错误:1210 MATCH 的参数不正确

我按如下方式重写了查询以删除错误消息并使其正常工作:

SELECT *, table2.columnx 
FROM table1 
    LEFT JOIN table2 ON table1.columnx_id = table2.id 
WHERE MATCH(table1.columny) AGAINST("+key* +word*" IN BOOLEAN MODE) 
      OR MATCH(table2.columnx) AGAINST("+key* +word*" IN BOOLEAN MODE);

只要所有搜索词keyANDword都在同一个表中,这就会很好地工作。

但是,如果 egkeytable1并且wordtable1我没有得到任何结果。

我该如何解决这个问题?

标签: mysqlsqlfull-text-searchleft-joininnodb

解决方案


正如@Akina 所描述的,这似乎是不可能的,因为INNODB不允许FULLTEXT在两个表上进行搜索。

我将只为搜索创建第三个表,FULLTEXT并用两个表中的数据填充它。


推荐阅读