在我目前的项目中,我有类似下表的内容。
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
如果我们只有一个包含name
和description
的表格,您可以在SQLFiddle中查看预期结果。
答案 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
目前,我认为您期望的结果逻辑是互斥的。请参阅上面的评论。