【问题标题】:MATCH AGAINST across multiple tables without joins跨多个表 MATCH AGAINST 没有连接
【发布时间】:2014-10-27 23:11:47
【问题描述】:

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

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

【问题讨论】:

  • 你试过子查询吗?
  • 是的,它适用于简单查询,但是当我添加更多表时,它不会返回任何内容
  • 您可以尝试其他用户名吗?我想知道 rasa 是不是被淘汰的钥匙
  • 一切都在那里,它存在于数据库中
  • @DarioTrboviæ 查询看起来没问题。你在使用 Innodb 表吗?您使用的是什么版本的 MySQL?你能检查一下show global variables like "ft_min_word_len" AND show global variables like "innodb_ft_min_token_size" 的输出返回什么吗?

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


【解决方案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')
    ...

【讨论】:

    猜你喜欢
    • 2012-05-22
    • 2019-05-17
    • 2015-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-08
    相关资源
    最近更新 更多