在没有连接的情况下跨多个表匹配

时间:2014-10-27 23:11:47

标签: mysql full-text-search fulltext-index

我正在尝试使用全文并匹配多个表但没有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') ...

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

1 个答案:

答案 0 :(得分: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 ADD FULLTEXT INDEX(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')
    ...