MySQL полнотекстовый поиск, почему я получаю неверные аргументы в MATCH - PullRequest
4 голосов
/ 10 апреля 2010
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'
)

Ответы [ 2 ]

13 голосов
/ 10 апреля 2010

Все столбцы в MATCH (...) должны быть из одной и той же таблицы, поскольку они должны быть полнотекстовыми, а MySQL не может создать один индекс для данных в нескольких таблицах.

8 голосов
/ 21 декабря 2010

У меня была такая же проблема, и я решил ее так:

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')

Но, как я вижу, вы ищете в простых полях, таких как «имя» и «почтовый индекс». Что касается меня, то было бы лучше использовать 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%')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...