mysql多表全文搜索

njthzxwz  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(415)

在我目前的项目中,我有如下表格。

Customer table          Task table
+----+----------------+ +----+--------------+-------------+
| id | name           | | id | description  | customer_id |
+----+----------------+ +----+--------------+-------------+
| 1  | teste client 1 | | 1  | do something | 1           |
+----+----------------+ +----+--------------+-------------+
| 2  | teste client 2 | | 2  | anything     | 2           |
+----+----------------+ +----+--------------+-------------+

我想按任务搜索 description 和客户 name 使用一些用户关键字。

select * 
from task t
inner join customer c on t.customer_id = c.id  
where match(t.description, c.name) 
against ('+test*+some*' IN BOOLEAN MODE);

使用前面的查询,我得到以下错误 Error Code: 1210. Incorrect arguments to MATCH ,我知道我不能在同一个匹配中使用不同表中的字段。
但是,如何使用多个匹配得到与上一个查询完全相同的结果呢?
(如果有人有或知道一篇关于这类问题的好文章,请告诉我)
更新
对于提供的查询和数据,请遵循一些导出的结果:
当我搜索时 test 以及 some 结果应该是 teste client 1 当我搜索时 test 以及 client 结果应该是 teste client 1 以及 teste client 2 当我搜索时 any 结果应该是 teste client 2 例如,如果只有一个表同时包含这两个表,那么可以在sqlfiddle中检查预期的结果 name 以及 description .

okxuctiv

okxuctiv1#

更新的解决方案sqlfiddle

set @q = 'test* some*';

select * from 
(
    select
        c.id,
        c.name,
        match(c.name) against (@q IN BOOLEAN MODE) as t1_match,
        match(t.description) against (@q IN BOOLEAN MODE) as t2_match
    from task t
    inner join customer c on t.customer_id = c.id  
) as s
where s.t1_match > 0 OR s.t2_match > 0

目前,我认为你所期望的结果逻辑是相互排斥的。请看我上面的评论。

相关问题