MySQL多表全文搜索

时间:2018-01-05 22:12:31

标签: mysql full-text-search

在我目前的项目中,我有类似下表的内容。

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,我知道我不能在同一场比赛中使用不同表格中的字段。

但是如何使用更多的匹配来获得与上一个查询完全相同的结果?

(如果有人或者知道关于此类问题的好文章,请告诉我们)

更新

按照提供的查询和数据的一些已检测结果:

  • 当我按testsome搜索时,结果应仅为teste client 1
  • 当我按testclient进行搜索时,结果应为teste client 1teste client 2
  • 当我按any搜索时,结果应为teste client 2

如果我们只有一个包含namedescription的表格,您可以在SQLFiddle中查看预期结果。

1 个答案:

答案 0 :(得分:1)

更新的解决方案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 

目前,我认为您期望的结果逻辑是互斥的。请参阅上面的评论。