2014-10-27 58 views
1

我想使用全文和匹配多个表,但没有Join,因为它们是不相关的。 我已经试过类似:MATCH AGAINST跨多个表没有加入

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

但它没有返回,我不知道我在做什么错。

+0

您是否尝试过的子查询? – 2014-10-27 23:20:12

+0

是的,它适用于简单的查询,但是当我添加更多的表时,它不会返回任何东西 – 2014-10-27 23:22:25

+0

你可以尝试不同的用户名吗?我想知道如果拉萨是一个关键是被淘汰 – Jaylen 2014-10-27 23:26:26

回答

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') 
    ... 
+0

它帮助了我。谢谢 :) – 2014-10-28 09:05:25