使用替代拼写对表进行名称匹配

时间:2011-03-07 14:17:17

标签: php javascript lookup country-codes name-matching

我有一张表格,其中包含国家/地区名称的替代拼写:

使用名称,Alt1,Alt2,Alt3,Alt4
[...]
巴哈马,“巴哈马,” 玻利维亚
波斯尼亚和黑塞哥维那,波斯尼亚和波黑黑塞哥维那
[...]

(有些国家有0种替代拼写,其他拼写有4种。)

给定一个国家/地区字符串,在第一列中返回元素的最佳解决方案是性能方面的? (在大多数情况下,与替代拼写的数量无关,字符串与第一列匹配,不必进行名称匹配。在其他情况下,概率均匀分布在第2-X列。

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

1 个答案:

答案 0 :(得分:1)

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

countries: id, ..., ...

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

在名称列上放置一个索引,以便您可以快速搜索正确的名称和country_id:

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

其他选项是仅为替代名称创建表:

countries: id, name, ..., ...

countries_alternative_names: country_id, name

但是在寻找第一场比赛时你必须在两张桌子中搜索。


编辑:静态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;
  }
}