1

我正在尝试使用全文并匹配多个表,但没有,Join因为它们不相关。我试过类似的东西:

SELECT mg_users.username, mg_users.email, mg_uzgajivac.imeuzgajivaca ...
  FROM mg_users,mg_uzgajivac,mg_buy_it_now,mg_golu ...
 WHERE MATCH(mg_users.username) AGAINST ('rasa')
    OR MATCH(mg_users.email) AGAINST ('rasa')
    OR MATCH(mg_uzgajivac.imeuzgajivaca) AGAINST ('rasa')
    OR MATCH(mg_uzgajivac.mjesto) AGAINST ('rasa') ...

但它什么也没返回,我不确定我做错了什么。

4

1 回答 1

1

我认为您的问题是索引不是最新的。您需要重建索引以使 MATCH ... AGAINST 正常工作。

如果您使用的是 MyISAM 表,那么修复这些表将重建您的索引

REPAIR TABLE table_name;

但是如果你使用 Innodb 表“你应该”。您可以执行一个虚假的 ALTER 命令,该命令将强制重建索引。它不会改变任何东西,但会强制表重建。

ALTER TABLE table_name ENGINE=innodb;

这可能是题外话,但这是值得考虑的事情。您可以使用多列全文索引来加快查询速度

ALTER TABLE mg_users ADD FULLTEXT INDEX (user_name, email); ALTER TABLE mg_uzgajivac 添加全文索引(imeuzgajivaca,mjesto);

然后您的查询将如下所示

SELECT mg_users.username, mg_users.email, mg_uzgajivac.imeuzgajivaca ...
FROM mg_users,mg_uzgajivac,mg_buy_it_now,mg_golu ...
WHERE MATCH(mg_users.username, mg_users.email) AGAINST ('rasa')
    OR MATCH(mg_uzgajivac.imeuzgajivaca, mg_uzgajivac.mjesto) AGAINST ('rasa')
    ...
于 2014-10-28T00:11:13.637 回答