MySQL:使用单个输入搜索多个列(GoogleMaps样式)

时间:2015-09-06 17:28:08

标签: php jquery mysql google-maps

我有一个为美国加载geonames's data的数据库。我想在该表上执行查询,以从与Google地图具有或多或少相同功能的单个输入中找到最接近的匹配(即,用户可以输入邮政编码,逗号分隔的分层地址,如'Nevada,Las拉斯维加斯'或两者兼而有之。)

到目前为止,我已将FULLTEXT索引添加到表的相关字段中,并从输入执行查询,如下所示:

SELECT * FROM places WHERE MATCH(country_code, postal_code, place_name, admin_name1, admin_code1, admin_name2, admin_code2) AGAINST (?);

在哪里?由php脚本输入替换。尽管它有点工作,它没有按预期执行,它没有把最相关的匹配放在第一位,需要一个完整的单词才能开始找到匹配(我尝试使用通配符但情况更糟)。我也尝试拆分输入,如果它有逗号,但查询的逻辑开始变得混乱,无法生成性能更好的脚本。

有没有办法以如此广泛的匹配条件搜索此数据库?

我正在通过AJAX查询数据库所以我需要它来开始搜索,即使这个词还没有完成(我正在使用jQuery的预先输入)。

提前致谢!

3 个答案:

答案 0 :(得分:0)

Weka_control文字替换为您的文字。

string_to_be_searched

答案 1 :(得分:0)

FULLTEXT(country_code, postal_code, place_name, admin_name1...)

会让你的MATCH工作。但是......请注意FULLTEXT的局限性:它只搜索"单词"一些最小字长,

答案 2 :(得分:0)

您正在做的是搜索匹配的寄存器,但您没有订购它们。

尝试这样的事情:

SELECT *, MATCH(country_code, postal_code, place_name, admin_name1, admin_code1, admin_name2, admin_code2) AGAINST (?) AS relevance FROM places WHERE MATCH(country_code, postal_code, place_name, admin_name1, admin_code1, admin_name2, admin_code2) AGAINST (?) ORDER BY relevance DESC;