MySQL全文搜索,为什么我得到错误的MATCH参数

vic*_*ick 4 mysql

SELECT 
* 
FROM 
company c
INNER JOIN 
city ci ON ci.city_id = c.city_id
INNER JOIN 
state s ON s.state_id = c.state_id
WHERE 
MATCH (
c.name, ci.name, c.zipcode, s.name
)
AGAINST (
'los angeles'
)
Run Code Online (Sandbox Code Playgroud)

Mes*_*ssa 14

所有列MATCH (...)必须来自同一个表,因为它们必须是全文索引的,并且MySQL无法为多个表中的数据创建一个索引.


Kar*_*fax 8

我遇到了同样的问题并解决了这个问题:

SELECT 
* 
FROM 
company c
INNER JOIN 
city ci ON ci.city_id = c.city_id
INNER JOIN 
state s ON s.state_id = c.state_id
WHERE 
   MATCH (c.name) AGAINST ('los angeles')
OR MATCH (ci.name) AGAINST ('los angeles')
OR MATCH (c.zipcode) AGAINST ('los angeles')
OR MATCH (s.name) AGAINST ('los angeles')
Run Code Online (Sandbox Code Playgroud)

但正如我所见,您正在搜索"名称"和"邮政编码"等简单字段.至于我,最好使用LIKE它们并将它们连接起来

SELECT 
* 
FROM 
company c
INNER JOIN 
city ci ON ci.city_id = c.city_id
INNER JOIN 
state s ON s.state_id = c.state_id
WHERE 
CONCAT_WS (' ', c.name, ci.name, c.zipcode, s.name)
LIKE ('%los angeles%')
Run Code Online (Sandbox Code Playgroud)