2014-10-27 89 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