首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用可选拼写对表进行名称匹配

使用可选拼写对表进行名称匹配
EN

Stack Overflow用户
提问于 2011-03-07 14:17:17
回答 1查看 375关注 0票数 2

我有一张桌子上有不同的国名拼法:

使用名称,Alt1,Alt2,Alt3,Alt4

..。

巴哈马“巴哈马”

玻利维亚

波斯尼亚和黑塞哥维那、波斯尼亚和黑塞哥维那

..。

(有些国家有0种备选拼写,其他多达4种。)

给定一个国家字符串,从性能上讲,返回第一列中的元素的最佳解决方案是什么?(在大多数情况下,不依赖于可选拼写的数量,字符串与第一列匹配,不必匹配名称。在其他情况下,概率均匀分布于第2-X列。

(最好是在JavaScript或PHP中,谢谢:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-07 14:32:50

在我看来,我认为您应该将它放在数据库中的两个单独的表中:

代码语言:javascript
复制
countries: id, ..., ...

countries_names: country_id, default (bool or enum('yes', 'no')), name

在name列上添加一个索引,以便快速搜索正确的名称和country_id:

代码语言:javascript
复制
SELECT name FROM countries_names
WHERE default = 'yes'
AND country_id = (SELECT country_id FROM countries_names
                  WHERE name = 'search_string'
                  LIMIT 1)
LIMIT 1

(如果需要从主表获得更多信息,可以选择添加一个LEFT JOIN )

其他选项是只为其他名称创建一个表:

代码语言:javascript
复制
countries: id, name, ..., ...

countries_alternative_names: country_id, name

但是,在寻找第一次匹配时,您必须在两个表中搜索。

编辑:静态JavaScript解决方案:

代码语言:javascript
复制
function getCountryName(var name) {
  switch (name) {
    case "Bahamas" :
    case "The Bahamas" :
      return "Bahamas";
    case "Bolivia" :
      return "Bolivia";
    case "Bosnia and Herzegovina" :
    case "Bosnia & Herzegovina" :
      return "Bosnia and Herzegovina"

    // ...

    default :
      return null;
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5220750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档