【发布时间】:2018-01-05 22:12:31
【问题描述】:
在我当前的项目中,我有如下表格。
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 中查看预期结果。
【问题讨论】:
-
在哪里可以找到问题的解决方案或仍在寻找合适的查询?
-
不,我没有找到任何解决这个问题的方法。
-
我认为您想要的结果表是互斥的:搜索
test and some时,您匹配两个表,因此只返回test client 1。但是,当您在 Tasks 表中搜索test and client时,没有一个 customer_id 匹配,但您仍然说应该返回teste client 1和teste client 2。我认为这在逻辑上是不正确的。为什么要在第二种情况下省略第二个表匹配,而在第一种情况下需要它?在我的回答中使用我的尝试检查指向 SQLFiddle 的链接。 -
嗯,是的,我明白你的意思,但是在没有
name和description两列的单独表格的情况下,有没有办法做到这一点?为搜索关键字设置单独的表格的问题是我必须维护重复的信息。您可以检查我使用您创建的更新 SQLFiddle。 -
FTS-ed 列在 2 个表中拆分是没有问题的。正如你从我的小提琴中看到的,我们可以有效地将它们与
JOIN结合起来。问题是您的条件是否只需要一个表匹配或两者都不确定。如果您创建一个一致的匹配要求,我认为我们将能够创建一个查询来选择正确的结果,即使列拆分为 2 个表。我们只需要确切地知道什么时候只需要第一个表匹配,只需要第二个表匹配,两个表匹配或至少一个表匹配。顺便说一句,我看不到你在 Fiddle 中的变化。请添加链接。